Avatar billede schubert1 Nybegynder
30. august 2007 - 11:12 Der 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

Tak for hjælpen :)
Avatar billede kjulius Novice
30. august 2007 - 12:23 #1
Taler vi om Microsoft SQL Server CE version?

Jeg kender ikke den version, men din SQL ser da rigtig ud, så hvad er problemet helt nøjagtigt?
Avatar billede schubert1 Nybegynder
30. august 2007 - 12:33 #2
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å.
Avatar billede schubert1 Nybegynder
30. august 2007 - 12:34 #3
^ Ja Microsoft SQL Server CE
Avatar billede kjulius Novice
30. august 2007 - 13:00 #4
Vil det sige, at en bruger optræder flere gange i Raekkefølge tabellen selv inden for den dag du udvælger?
Avatar billede kjulius Novice
30. august 2007 - 13:08 #5
Prøv med:

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
Avatar billede kjulius Novice
30. august 2007 - 13:24 #6
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.
Avatar billede kjulius Novice
30. august 2007 - 13:29 #7
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
Avatar billede schubert1 Nybegynder
30. august 2007 - 13:45 #8
Ser okay ud men i SQL CE kan man desværre ikke lave sub selects :(
Avatar billede schubert1 Nybegynder
06. februar 2008 - 11:51 #9
Lukker
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