Left outer join
Jeg har en tabel med felterne År, Medarbejdernr, Ferietype og Optjente_Feriedage.År kan antage værdierne ”Dette”, ”Sidste” og ”Forrige”, og ”Ferietype” kan antage værdierne ”A” og ”B”.
Således kan der for hver medarbejder findes maksimalt 3*2 poster, men ikke alle medarbejdere er registreret med lige mange poster. Eks.:
År Medarbejdernr Ferietype Optjente_Feriedage
Dette 20 A 10
Sidste 20 A 20
Dette 20 B 40
Sidste 20 B 50
Dette 21 A 70
Sidste 21 A 80
Dette 21 B 100
Jeg vil gerne lave en forespørgsel der for hver medarbejder fordelt på ferietype A og B henter optjente feriedage for hvert af de tre år, så jeg får data på følgende måde:
Medarbejdernr Ferietype Optjente dette år Optjente sidste år
20 A 10 20
20 B 40 50
21 A 70 80
21 B 100 0
Jeg har valgt at kopiere tabellen, så jeg har to ens tabeller, t1 og t2, hvor jeg så vil hente data vedr. ”Dette år” fra t1 og data vedr. ”Sidste år” fra t2. Men jeg har tilsyneladende et problem med mine joins, da forespørgslen smider den nederste række (21 B) ud og returnerer følgende:
Medarbejdernr Ferietype Optjente dette år Optjente sidste år
20 A 10 20
20 B 40 50
21 A 70 80
Hvad går galt i min forespørgsel? Det skal siges at der ikke er defineret nogen primær nøgle i tabellerne - har overvejet hvorvidt en sådan evt. skal defineres, der bliver vist brug for tre nøgler (År, Medarbejdernr, Ferietype) hvis dette er nødvendigt.
SELECT [t1].[Medarbejdernr], [t1].[Ferietype], [t1].[Optjente_Feriedage] AS [Optjente dette år], [t2].[Optjente_Feriedage] AS [Optjente sidste år],
FROM t1 LEFT JOIN t2 ON [t1].[Medarbejdernr]=[t2].[Medarbejdernr] AND [t1].[Ferietype]=[t2].[Ferietype]
WHERE ((([t1].[År])="Dette") And (([t2].[År])="Sidste"));