[MS-SQL]Alle diploma's weergeven van een medewerker, als er 1 vervalt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Riemer

Riemer

31/03/2008 11:38:00
Quote Anchor link
Goeiendag,

Ik moet voor stage een soort van rapport maken waarbij de gebruiker kan zien welk werknemer binnenkort zijn diploma's vervallen/ongeldig zijn.

laten wij zeggen dat elk medewerker in dit bedrijf 3 diploma's zijn en dus ook 3 soorten medewerkers zijn (a, b, c neem ik als voorbeeld).
Maar het kan dus zo zijn dat een medewerker omgeschoold is naar een ander soort medewerker (van a naar b).
Als een medewerker dus omgeschoold is, staan beide diploma's in de database.

Het zou makelijk op te lossen zijn met een extra kolom om te markeren of een diploma relevant is of niet. Maar helaas is dit niet mogelijk, aangezien de database wordt beheerd door een ander programma die ik niet aan kan passen (lees, geen opensource).

Wat ik dus nu zoek is een manier om alle diploma's van een persoon te weergeven als deze 1 diploma bezit die vervalt. Ik geloof dat dit wel mogelijk is met een inner join, maar ik ben geen SQL expert en heb dit ook nooit geprobeerd. Kan iemand mij een soort van pseudo-code geven hoe ik dit moet aanpakken?

Verder hier het overige informatie:

Elk record ziet het volgende eruit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
- Pernr: char(6), dit is de afkorting gebruikt om een persoon te herkennen
 - regopm: char(30), de diploma
 - tdat: datetime, de datum wanneer de diploma vervalt
 - vdat: datetime, de datum wanneer de diploma is verkregen


Mijn huidige SQL code
(excuses voor al dat CONVERT gedoe, dit ivm met presenteren van gegevens)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
        pernr,
        regopm,
        CONVERT(varchar, tdat, 103) AS tdate,
        CONVERT(varchar, vdat, 103) AS vdate,
        tdat
FROM
        medewerkers
WHERE    
        (tdat IS NOT NULL) AND
        (CONVERT(datetime, CONVERT(varchar, tdat, 103), 103) >=
        CONVERT(datetime, CONVERT(varchar, GETDATE() - 1, 103), 103)) AND
        (CONVERT(datetime, CONVERT(varchar, tdat, 103), 103) <=
        CONVERT(datetime, CONVERT(varchar, GETDATE() + 365, 103), 103))
ORDER BY
        YEAR(tdat), MONTH(tdat), DAY(tdat)
Gewijzigd op 01/01/1970 01:00:00 door Riemer
 
PHP hulp

PHP hulp

24/04/2024 07:09:29
 
Joren de Wit

Joren de Wit

31/03/2008 11:46:00
Quote Anchor link
Om alle mederwerkers te selecteren die in het bezit zijn van een diploma dat binnen 30 dagen vervalt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    pernr
FROM
    medewerkers
WHERE
    tdat < CURRENT_DATE + INTERVAL 30 DAY

Als je alle diplomas van betreffende werknemer wilt selecteren, zul je dit in een subquery moeten gieten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    pernr,
    regopm
FROM
    medewerkers
WHERE
    pernr IN (
        SELECT
            pernr
        FROM
            medewerkers
        WHERE
            tdat < CURRENT_DATE + INTERVAL 30 DAY
    )
 
Riemer

Riemer

31/03/2008 11:55:00
Quote Anchor link
Bedankt,

Ik zal er mee aan de slag.
Even uit puur SQL interesse, hoe zou ik alleen medewerkers kunnen selecteren waar alle diploma's verlopen?

Als ik te lastig ben, zeg het maar. Maar ik vroeg me gewoon wat af.

Maar bedankt in iedergeval, ik zal er mee aan de slag :)
Gewijzigd op 01/01/1970 01:00:00 door Riemer
 
Joren de Wit

Joren de Wit

31/03/2008 12:08:00
Quote Anchor link
Dat zou de tegengestelde query zijn, dus alle personen selecteren die geen verloopdatum buiten nu en 30 dagen in de toekomst hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    pernr,
    regopm
FROM
    medewerkers
WHERE
    pernr NOT IN (
        SELECT
            pernr
        FROM
            medewerkers
        WHERE
            tdat > CURRENT_DATE + INTERVAL 30 DAY
    )
 
Riemer

Riemer

31/03/2008 12:18:00
Quote Anchor link
Bijna zo simpel dat ik bijna spijt krijg dat ik niet eerder een google zoekopdracht erop los gelaten had.

Maar bedankt in iedergeval, ik zal er mee bezig.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.