Avatar billede sho Nybegynder
09. december 2004 - 13:26 Der er 5 kommentarer og
1 løsning

Vælge DISTINCT og ORDER BY i SQL

Hejsa,

jeg ved ikke helt, om SQL-spørgsmål hører hjemme her, men jeg kan ikke rigtig finde andre kategorier, der er mere passende, og det er vist ikke det første, der bliver postet her, så jeg håber på overbærenhed! :-)

Jeg skal have trukket nogle data ud fra en database, hvor jeg vil vælge dem DISTINCT, men ORDER BY et felt, jeg ikke trækker med ud. Det kan jeg ikke lige få til at lykkes...

Eksempel:

SELECT DISTINCT cOID, cKunde, cTitel FROM tblForbrug WHERE cUID=5 ORDER BY cID DESC

Udtrækket skal sorteres efter cID, men cID skal jo ikke trækkes med ud. Et eksempel på indholdet af databasen kunne være:

cID    cOID    cKunde    cTitel    cUID
-------------------------------------------
1      5000    Kunde1    Titel1    5
2      5020    Kunde2    Titel2    5
3      5000    Kunde1    Titel1    5

Resultatet af udtrækket skal være:

cOID    cKunde    cTitel
------------------------------------
5020    Kunde2    Titel2
5000    Kunde1    Titel1

Nogle hajer, der kan hjælpe?

-Søren
Avatar billede erikjacobsen Ekspert
09. december 2004 - 14:00 #1
Hvilken SQL-server bruger du. MS-SQL siger fx:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

og det er vel ikke noget problem. Du tager bare feltet med, men lader være med
at bruge det til noget?
Avatar billede sho Nybegynder
09. december 2004 - 14:04 #2
Det er Access, der ligger under.

Hvis jeg tager cID-feltet med, så er hver linie jo ikke distinct længere - se min tabel med det ønskede resultat.
Avatar billede erikjacobsen Ekspert
09. december 2004 - 14:06 #3
Nåh, på den måde. Jeg har ikke lige prøvet i Access, men hvis den har samme
problem, er der kun et hack tilbage.

Tænk over at det ikke er veldefineret hvilken cID, den skal sortere efter, når der
er flere at vælge imellem. Skal din 5000-kunde sorteres efter cID=1 eller 3?

Hvis du kan bestemme dig, bør dette virke:

  select cOID,cKunde,cTitel,max(cID) from ... group by cOID,cKunde,CTitel order by Max(cID)
Avatar billede sho Nybegynder
09. december 2004 - 14:16 #4
Der er kun én cID-kolonne at sortere efter, men værdierne i kolonnen skal sorteres i faldende orden. Hvis der kun var én værdi, var den svær at sortere :-)

Det var jo netop derfor, at jeg ville søge DISTINCT, fordi linierne iøvrigt er ens, så om det er 1 eller 3 er underordnet.

Men dit hack virker fint, så jeg takker så mange gange for hjælpen! Jeg havde selv prøvet lidt med GROUP BY, men ikke at kombinere dem...

Smid et svar, så jeg kan belønne dig! ;-)

-Søren
Avatar billede erikjacobsen Ekspert
09. december 2004 - 15:54 #5
Tak, men jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede sho Nybegynder
09. december 2004 - 15:55 #6
Hmm, men det er nu engang konceptet herinde, og du har fortjent dem, men du skal i hvert fald have så mange tak for hjælpen! ;-))
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
Kurser inden for grundlæggende programmering

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