webForumDet fria alternativet

DISTINCT fast i "grupper"

Databaser & SQLur Databashanterare & SQL

6 svar · 423 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

Hej! Lite förenklat så ser resultatet jag hämtar ut från två tabeller så här (det finns fler kolumner där varje rad är unik, därför fungerar inte distinct):

Kol 1 Kol 2 
1      A     
2      A     
2      A     
1      B      
2      B    
3      B    
2      C    
2      C    
2      C

Men jag skulle vilja att det såg ut så här:

Kol 1   Kol 2
1       A    
2       A    
1       B    
2       B    
3       B    
2       C

Alltså att samma id i kolumn 1 inte får förekomma mer än en gång där kolumn 2 innehåller A, inte mer än en gång där kolumn 2 innehåller B osv... någon som förstår vad jag är ute efter?

Använder sql server, och det är när jag joinar ihop två tabeller som det blir fel.

Medlem sedan dec. 200012 464 inlägg
#2

Det finns alltså ytterligare kolumner i resultatsetet?

C1   C2   C3
-----------
2      A    2
2      A    1

?

Vilket värde från C3 vill du ha? Har jag fel eller har jag fel?

Medlem sedan sep. 2005673 inlägg
#3

Ja, fler kolumner... och det spelar ingen roll vilket värde från kolumn 3 som kommer med i det här fallet, typ den första bara. I ditt exempel skulle jag alltså bara vilja få ut "2 A 2" men få bort den andra. Tänkte alltså om det går att använda DISTINCT på en del av kolumnerna!

Medlem sedan dec. 19996 721 inlägg
#4

Nej, det kan du inte göra, men du kan använda en GROUP BY och kasta dit aggregatfunktioner på de övriga kolumnerna, men då kan du inte veta från vilken rad de kommer (det kan variera mellan kolumnerna)

SELECT C2,C2,MAX(C3) as C3 FROM tabellen GROUP BY C1,C2
Medlem sedan sep. 2005673 inlägg
#5

Ok, tack, jag ska nog ändra lite i strukturen, det är antagligen feltänk från början. En annan fråga i lite av samma ämne... jag försöker göra det här:

SELECT DISTINCT TOP (3) X
FROM Y
ORDER BY DateTime

Om man tar med "DateTime" i selecten så fungerar själva frågan, men då blir den ju inte distinct eftersom varje "DateTime" är unik. Vet ni hur man kan göra istället? Vill alltså att X ska vara unikt.

Medlem sedan dec. 200012 464 inlägg
#6
select top 3 x,max(datetime) as obsequent
   from y
 group by x
 order by obsequent desc
Medlem sedan sep. 2005673 inlägg
#7

Tack, LarsG! Du är ju helt otrolig på sql... :)

258 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
125 ms — hämta forumlista (db)
124 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)