27. august 2008 - 11:09Der er
9 kommentarer og 1 løsning
Hjælp til at fjerne dubletter fra udtræk
Jeg skal lave et udtræk fra en tabel med en masse ordre. Der er flere ordre per kunde. Jeg vil vise alle kunders sidste ordre. Kunderne kan identificeres med "kundeID" og ordrene er nummereret sekventielt, så jeg skal kun have én linie per "KundeID" og det skal være den med det højeste tal i "OrdreID".
SELECT DISTINCT TOP 100 PERCENT KundeID, OrdreID FROM dbo.Ordre_view o1
Det virker umiddelbart, men problemet sker når jeg henter endnu en kollonne som indeholder et portnummer. Hvis der er flere ordrer på en kunde, så står der typisk noget forskelligt portnummer.
SELECT KundeID, MAX(OrdreID) AS Ordre_ID, portnummer FROM dbo.Ordre_view o1 GROUP BY KundeID, portnummer
Når jeg kører den får jeg dubletter. Der står forskellige ting i "portnummer", men jeg vil kun have den med højeste "ordreID"
SELECT KundeID, MAX(OrdreID) AS Ordre_ID, portnummer FROM dbo.Ordre_view o1 GROUP BY KundeID, portnummer HAVING (OrdreID = MAX(OrdreID))
Men jeg får fejlen "Column 'o1.OrdreID' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause" Sætter jeg OrdreID i GROUP BY får jeg stadig dubletter.
SELECT KundeID, OrdreID AS Ordre_ID, portnummer FROM dbo.Ordre_view o1 where o1.OrdreID = (select max(v.ordreid) from dbo.ordre_view v where v.kundeID= o1.KundeID)
Måske du lige kan svare lidt mere... det virker nemlig alligevel ikke helt efter hensigten da jeg har fundet en lille twist :-)
Jeg skal bruge linien med højeste "ordreID" hvor "ProduktNr" er "235", men hvis ikke der er en linie hvor "ProduktNr" = "235", så skal den bare tage den højeste ordre, som den gør nu...
SELECT KundeID, OrdreID AS Ordre_ID, portnummer, ProduktNr FROM dbo.Ordre_view o1 where o1.OrdreID = isnull((select max(v.ordreid) from dbo.ordre_view v where v.kundeID= o1.KundeID and v.ProduktNr = 235) ,(select max(v.ordreid) from dbo.ordre_view v where v.kundeID= o1.KundeID))
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.