2012-09-27 16 views
9

Ho poche colonne di una tabellaCome selezionare distinti su colonne specifiche

Col1, Col2, Col3, Col4

Ora voglio per selezionare come questo

SELECT DISTINCT (Col1, Col2, Col3), Col4

ie ottenere il distinto basato o n solo queste tre colonne.

+0

E il 'Col4' è necessario eseguire alcune aggregazione su questo per ogni valore distinto delle altre 3 colonne? –

+0

È possibile ottenere aiuto da questo post http://stackoverflow.com/questions/1471250/counting-distinct-over-multiple-columns –

risposta

3

Da un commento ad un'altra risposta:

Posso avere come questo Col1, Col2, Col3 e (Col4 in forma delimitatore)

Sì, è possibile utilizzare il for xml path.

select Col1, 
     Col2, 
     Col3, 
     (
     select ',' + T2.Col4 
     from YourTable T2 
     where T1.Col1 = T2.Col1 and 
       T1.Col2 = T2.Col2 and 
       T1.Col3 = T2.Col3 
     for xml path(''), type 
     ).value('substring((./text())[1], 2)', 'varchar(max)') as Col4 
from YourTable as T1 
group by T1.Col1, T1.Col2, T1.Col3 

SQL Fiddle

6

Proprio GROUP BY Col1, Col2, Col3 con una funzione di aggregazione con il col4 come MAX, MIN, ecc .. in questo modo:

SELECT Col1, Col2, Col3, MAX(Col4) 
FROM TableName 
GROUP BY Col1, Col2, Col3 
+0

Questo è un campo varchar, voglio solo avere record distinti basati su tre colonne. – Zerotoinfinity

+0

@Zerotoinfinite Che ne dici di 'col4' cosa vuoi fare per esso per ogni valore distinto per le altre righe? –

+0

Col4 è varchar e non posso fare alcuna aggregazione su questo. ma quella è colonna unica. Volevo ottenere univoco di 3 colonne e aggiungere solo la quarta colonna relativa a quella riga – Zerotoinfinity

0

Il gruppo da eseguire e distinta funzionalità quasi simile a SQL:

SO entrambe le query di seguito sono quasi equivalenti:

SELECT DISTINCT Col1, Col2, Col3 FROM tbl 

SELECT Col1, Col2, Col3 FROM tbl GROUP BY Col1, Col2, Col3 
+1

Ma voglio avere Col4 anche nel set di risultati – Zerotoinfinity

+0

Perché non scrivi una query interna facendo distinzione tra 3 colonne e la query esterna che prende interno 3 e Col4 di righe corrispondenti? – RMN

0
select distinct (Convert(varchar(255),Col1) +' '+ 
Convert(varchar(255),Col2)+' '+Convert(varchar(255),Col3)), 
Col4 from clients 
Problemi correlati