Avatar billede cdull Nybegynder
30. august 2006 - 16:56 Der er 1 kommentar og
1 løsning

distinct første felt, plus tilhørende data ikke distinct

Lad os sige min tabel ser således ud.

# | kol1 | kol2 | kol3
1 | ibm | europa tysklan | berlin
2 | ibm | europa holland |amsterdam
3 | ibm | europa tjekkiet | prag
4 | ca | asien kina | beijing
5 | ca | asien sydkorea | something
6 | avh | europa danmark | københavn
7 | avh | europa sverige | stockholm

Hvordan får jeg data ud så kol1 alle er forskellige.
og de resterende informationer kommer med ud.
fx.

# | kol1 | kol2 | kol3
1 | ibm | europa tysklan | berlin
5 | ca | asien sydkorea | something
6 | avh | europa danmark | københavn

Det skal nærmest være distinct på kol1 men de resterende informationer skal bare med, ligemeget hvad de er.

Fx hvis man skal have fat i ibm, men ligegyldigt hvor de befinder sig.
Håber jeg gør mig klar nok om hvad det er jeg gerne vil have gjort.
Avatar billede thrytter Nybegynder
30. august 2006 - 21:36 #1
Noget i stil med

SELECT *
FROM EnTabel
WHERE EnTabel.Id IN
(
  SELECT TOP 1 T1.Id
  FROM EnTabel T1
  WHERE    T1.kol1 = EnTabel.kol1
)
Avatar billede kjulius Novice
30. august 2006 - 22:00 #2
Tja, det ville måske være nærliggende at sige

SELECT kol1, MIN(kol2) AS MinKol2, MIN(kol3) AS MinKol3
FROM tabel
GROUP BY kol1
ORDER BY kol1 DESC

men så kunne man ikke garantere, at værdierne i MinKol2 og MinKol3 "hænger sammen".
Med de viste data ville det ganske vist resultere i

ibm, europa holland, amsterdam
ca, asien kina, beijing
avh, europa danmark, københavn

hvilket faktisk er ok, selvom det ikke er helt det samme resultat, som det du ønsker.

Men hvis række 3 havde heddet
ibm, europa frankrig, paris

så ville resultatet af ovenstående forespørgsel have været
ibm, europa frankrig, amsterdam
ca, asien kina, beijing
avh, europa danmark, københavn

Desværre er der vist ikke andre muligheder - med mindre tabellen også har et felt, som er unikt pr. række, normalt et felt som bruges som primær nøgle. Mange har et autonummer felt, som bruges på den måde. Måske har du jo også sådan et felt, men har bare ikke oplyst om det?

Hvis vi nu antager, at du har et sådant felt - vi kalder det Id, så ville du kunne bruge en forespørgsel som

SELECT *
FROM tabel
WHERE Id IN (SELECT MIN(Id) FROM tabel GROUP BY kol1)
ORDER BY kol1 DESC
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



IT-JOB