30. august 2007 - 11:12Der er
8 kommentarer og 1 løsning
SLQ CE - Order by i en distinct select
Hej med jer eksperter! Jeg har lige et hurtigt spørgsmål. Jeg vil gerne have en liste ud som kund indeholder en forekomst af hver bruger. Brugerene kan godt forekomme flere gange da de har et tal som bestemmer rækkefølgen. Desuden skal listen være sorteret efter denne rækkefølge. Hvordan kan dette gøres i SQL CE?
SELECT Distinct Bruger.Nummer, Bruger.Navn FROM Bruger INNER JOIN Raekkefoelge ON Bruger.Nummer = Raekkefoelge.BrugerNummer WHERE (Raekkefoelge.Dato = '2007-08-30') ORDER BY Raekkefoelge.Order
Problemet er at man ikke kan ORDER BY Raekkefoelge.Order når den ikke er med i selecten, og hvis man tager den med i selecten, så kommer brugeren op flere gange, hvilket han ikke må.
SELECT B.Nummer, B.Navn, R.Order FROM Bruger B INNER JOIN ( SELECT Dato, BrugerNummer, MAX(Order) AS Order FROM Raekkefoelge WHERE Dato = '2007-08-30' GROUP BY Dato, BrugerNummer) R ON B.Nummer = R.BrugerNummer ORDER BY R.Order
Du er nødt til at vælge, hvilken af de registrerede rækkefølgenumre der skal sorteres efter hvis der virkelig er registreret forskellige til den samme bruger (og det må der jo være, hvis en DISTINCT SELECT med order feltet resulterer i dublerede brugere). Jeg har valgt MAX, men du kan selvfølgelig også vælge MIN. Jeg tror ikke du kan bruge FIRST og LAST funktioner, som i Access, men jeg kender som sagt ikke CE produktet.
Ret beset er det ikke nødvendigt at medtage datofeltet i den indre select. At droppe det vil åbne for muligheden for at selektere flere datoer (MAX funktionen sikrer, at der stadig kun returneres 1 order værdi, nemlig den største):
SELECT B.Nummer, B.Navn, R.Order FROM Bruger B INNER JOIN ( SELECT BrugerNummer, MAX(Order) AS Order FROM Raekkefoelge WHERE Dato BETWEEN '2007-08-28' AND '2007-08-30' GROUP BY BrugerNummer) R ON B.Nummer = R.BrugerNummer ORDER BY R.Order
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.