2012-09-27 90 views
9

我有幾個表中的列如何選擇特定的列不同

Col1中col2的COL3COL4

現在我想選擇這樣

SELECT DISTINCT (Col1, Col2, Col3), Col4

即得到不同的基於o只有這三個柱子。

+0

怎麼樣'Col4'您需要在此進行一些聚集了其他3列的每個不同的值? –

+0

您可能會從這篇文章中獲得幫助http://stackoverflow.com/questions/1471250/counting-distinct-over-multiple-columns –

回答

3

從另一個答案評論:

我能得到這樣的Col1中,col2的,COL3和(COL4在分隔符形式)

是的,你可以使用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

只要GROUP BY Col1, Col2, Col3與和col4MAX集合函數MIN等。像這樣:

SO兩個查詢:

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

這是一個varchar字段,我只是想要基於三列的不同記錄。 – Zerotoinfinity

+0

@Zerotoinfinite那麼'col4'你想爲其他行的每個不同值做什麼? –

+0

Col4是varchar,我不能做任何聚合。但那是獨一無二的專欄。我想獲得3列的獨特性,只需添加與該行相關的第四列 – Zerotoinfinity

0

通過和不同的執行SQL幾乎類似的功能的組下面幾乎相同:

SELECT DISTINCT Col1, Col2, Col3 FROM tbl 

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

但是我想在結果集中也有Col4 – Zerotoinfinity

+0

爲什麼不寫一個內部查詢來完成3列的區分,而外部查詢需要內部3和Col4的匹配行? – RMN

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