[MS-SQL]Alle diploma's weergeven van een medewerker, als er 1 vervalt
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)
1
2
3
4
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
- 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)
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
Als je alle diplomas van betreffende werknemer wilt selecteren, zul je dit in een subquery moeten gieten:
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
Maar bedankt in iedergeval, ik zal er mee bezig.