Avatar billede rosthoej Nybegynder
25. januar 2006 - 20:44 Der er 3 kommentarer

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"));
Avatar billede arne_v Ekspert
25. januar 2006 - 22:02 #1
du behoever ikke kopiere tabellen !

SELECT t1.medarbejdernr,t1.ferietype,t1.optjente_feriedage),t2.optjente_feriedage)
FROM tabelnavn t1,tabelnavn t2
WHERE t1.medarbejdernr=t2.medarbejdernr AND t1.aar='Dette' AND t2.aar='Sidste'

vil jeg tro
Avatar billede rosthoej Nybegynder
26. januar 2006 - 10:45 #2
Nej, så får jeg gentagelser, og i stedet for 0 på 21B "sidste år" får jeg 80 (den snupper data fra 21A "sidste år". Output bliver

Medarbejdernr    Ferietype    t1.Optjente_Feriedage    t2.Optjente_Feriedage
20    B    40    20
20    A    10    20
20    B    40    50
20    A    10    50
21    B    100    80
21    A    70    80
Avatar billede rosthoej Nybegynder
30. januar 2006 - 13:13 #3
Problemet er løst...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester