Avatar billede rune_daub Nybegynder
06. januar 2006 - 12:59 Der er 8 kommentarer og
1 løsning

Dobbelt linje til enkelt linje via sql i Access

Hej med jer

Jeg kom til at poste følgende link forkert.
http://www.eksperten.dk/spm/677129
Jeg har lukket dette link, men mangler stadig et svar.
Så hvis der er en af jer, der har mulighed for at svare på følgende, ville det være kanon.

Jeg har 2 tabeller.
En ordretabel
En datotabel

Eftersom en ordre kan være
Send
Recieved
på forskellige tidspunkter, vil der være flere poster i datotabellen per post i ordretabellen.

Jeg har brug for at lave et sql udtræk der resulteterer i følgende poster
OrderNumber, SendDate, RecieveDate.

Det er meget simpelt sat op, for rent teknisk set, er der mange flere typer datoer, end bare bestilt og modtaget.

Hvordan gør jeg det?
Eftersom senddato og modtagetdato rent teknisk står i samme tabel men i forskellige poster, hvor de kun har 1 faktor til fælles, og det er ordrenummeret, hvordan får jeg dem så til at vise sig i samme sql udtræk?

Uanset hvad jeg gør så siger den at den ikke vil lade mig lave en dobbelt join forespørgsel... Hvordan kommer jeg uden om det?

Følgende er som dataen ligger tblDato.
Ordrenummer, Datotype          , Dato
0001      , Send              , 01-01-2006
0001      , Recieved          , 02-01-2006
0002      , Send              , 01-01-2006
0002      , Recieved          , 03-01-2006
0003      , Send              , 01-01-2006
etc.

og dette ønsker jeg at hente.
Ordrenummer, Dato for datotype1, dato for datotype2
0001      , 01-01-2006        , 02-01-2006
0002      , 01-01-2006        , 03-01-2006
0003      , 01-01-2006        ,
etc.

Læg mærke til at der ikke altid for Datotype 2 er udfyldt en post, men så skal der bare indsætte et blankt felt i sql udtrækket.

Hvordan gør jeg det?

Min sql formåen er slet ikke til at kunne løse dette problem på egen hånd, så enhver hjælp vil være værdsat.

pft.

Rune Daub
Avatar billede lorentsnv Nybegynder
06. januar 2006 - 13:45 #1
Select Send.Ordrenummer, Send.Dato as SendDato, Rec.Dato as RecievedDato
From tblDato Send left join tblDato Rec on Send.Ordrenummer = Rec.Ordrenummer
Avatar billede lorentsnv Nybegynder
06. januar 2006 - 13:47 #2
Jeg var lidt hurtig første gang. Du må også have en where med:

Select Send.Ordrenummer, Send.Dato as SendDato, Rec.Dato as RecievedDato
From tblDato Send left join tblDato Rec on Send.Ordrenummer = Rec.Ordrenummer
where Send.Datotype = 'Send'
and Rec.Datotype = 'Recieved'
Avatar billede rune_daub Nybegynder
09. januar 2006 - 16:02 #3
Kanon.. jeg fik det til at virke langt om længe.. tak for hjælpen lorentsnv.
Avatar billede rune_daub Nybegynder
09. januar 2006 - 16:07 #4
Argh... Det fik jeg sagt lidt for tidligt.
Det jeg endeligt fik lavet ser således ud.

Select Send.ErrorNumb, Send.DateTime as SendDato, Rec.DateTime as RecievedDato
From tblDate Send left join tblDate Rec on Send.ErrorNumb  =  Rec.ErrorNumb
where Send.Happening  = 1
and Rec.Happening  =  5

Men i det er der ikke taget højde for hvis Rec.Happening ikke eksistere. Så skulle der jo indsættes et tom felt. Som det er nu, finder den KUN dem der har en Send og Recieved dato, og ikke alle dem som KUN har en Send dato.
Avatar billede lorentsnv Nybegynder
09. januar 2006 - 21:08 #5
Ved at du laver en left join, skulle du få med dig alle records fra 'tabellen' på venstre side i din join. Kan du beskrive dine data, så vil jeg kigge på det.
Avatar billede rune_daub Nybegynder
10. januar 2006 - 09:44 #6
Mine data ser således ud.
tblDate har 4 kolonner
DatesID - Autonumer
ErrorID - Number - Long interger
Happening - Long interger
DateTime - Long interger

Alle 4 er required information, så der er en fuld post hver gang.

Som jeg skriver, så kan der være flere poster med samme ErrorID. Det var derfor jeg havde brug for at samle de forskellige errorID til en samlet post i en query.

En ordre kan være send og recieved (Altså startet og afsluttet), og derfor har jeg brug for at se ordrer med og uden recieved dato. (Altså der er ikke nogen post i tblDate med en Happening = 5). Alle ordre har altid en post med Happening = 1.

Hvis du har brug for anden info, så lad mig lige vide..
Avatar billede lorentsnv Nybegynder
10. januar 2006 - 10:51 #7
Kan du lige prøve følgende:

Select Send.ErrorNumb, Send.DateTime as SendDato, Rec.DateTime as RecievedDato
From (Select * from tblDate where Send.Happening = 1) Send
  left join (Select * from tblDate where Send.Happening = 5) Rec on Send.ErrorNumb  =  Rec.ErrorNumb
Avatar billede rune_daub Nybegynder
10. januar 2006 - 13:16 #8
Jeg har prøvet med:

SELECT Send.ErrorNumb, Send.MyDateTime AS SendDato, Rec.MyDateTime AS RecievedDato
FROM (SELECT * FROM tblDate WHERE Send.Happening = 1) Send
LEFT JOIN (SELECT * FROM tblDate WHERE Send.Happening = 5) Rec ON Send.ErrorNumb  =  Rec.ErrorNumb

Det rejser nogle enkelte problemstillinger.
Først og fremmest så indsætter den alle datoer uanset om de er Happening=1 eller Happening=5 som værende Happening=1.
Dernæst, så starter forespørgslen med en "Enter parameter value" for "Send.Happening". Hvilket vil sige at den ikke automatisk kan finde ud af at vi har angivet where Send.Happening=1.

Jeg har så brug for at få den her forespørgsel til at fungere. Det er den eneste måde jeg kan lave det nødvendige udtræk til mine chefer uden at skulle til at sætte det hele op manuelt i et excel ark :)
Avatar billede lorentsnv Nybegynder
13. januar 2006 - 13:57 #9
Hej Rune

Prøv med følgende på SQL Server:
SELECT Send.ErrorNumb, Send.MyDateTime AS SendDato, Rec.MyDateTime AS RecievedDato
FROM (SELECT * FROM tblDate WHERE Happening = 1) Send
LEFT JOIN (SELECT * FROM tblDate WHERE Happening = 5) Rec ON Send.ErrorNumb  =  Rec.ErrorNumb

I min tidligere SQL havde jeg sat Send.Happening = 1 og Send.Happening = 5. Det skal kun være Happening = 1 og Happpening = 5. Beklager fejlen!
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