2012-09-27 33 views
9

Tôi có vài cột trong một bảngLàm thế nào để chọn riêng biệt trên các cột cụ thể

col1, col2, Col3, Col4

Bây giờ tôi muốn chọn như thế này

SELECT DISTINCT (Col1, Col2, Col3), Col4

tức là nhận được chữ o riêng biệt n chỉ ba colunms này.

+0

gì về 'Col4' bạn cần phải thực hiện một số tập hợp về vấn đề này đối với từng giá trị riêng biệt của 3 cột khác? –

+0

Bạn có thể nhận trợ giúp từ bài đăng này http://stackoverflow.com/questions/1471250/counting-distinct-over-multiple-columns –

Trả lời

3

Từ một bình luận cho câu trả lời khác:

Tôi có thể có được như col1 này, col2, Col3 và (Col4 ở dạng delimiter)

Có, bạn có thể sử dụng 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

Chỉ GROUP BY Col1, Col2, Col3 với một chức năng tổng hợp với col4 như MAX, MIN, vv .. như vậy:

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

Đó là trường varchar, tôi chỉ muốn có các bản ghi riêng biệt dựa trên ba cột. – Zerotoinfinity

+0

@Zerotoinfinite Còn 'col4' thì bạn muốn làm gì cho mỗi giá trị khác biệt cho các hàng khác? –

+0

Col4 là varchar và tôi không thể làm bất kỳ tập hợp trên đó. nhưng đó là cột duy nhất. Tôi muốn để có được duy nhất của 3 cột và chỉ cần thêm cột thứ tư liên quan đến hàng đó – Zerotoinfinity

0

Các nhóm bằng và khác biệt thực hiện chức năng gần như tương tự trong SQL:

SO cả các truy vấn dưới đây gần như tương đương:

SELECT DISTINCT Col1, Col2, Col3 FROM tbl 

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

Nhưng tôi muốn có Col4 cũng trong resultset – Zerotoinfinity

+0

Tại sao bạn không viết một truy vấn bên trong làm khác biệt của 3 cột và truy vấn bên ngoài dùng bên trong 3 và Col4 của hàng phù hợp? – RMN

0
select distinct (Convert(varchar(255),Col1) +' '+ 
Convert(varchar(255),Col2)+' '+Convert(varchar(255),Col3)), 
Col4 from clients 
Các vấn đề liên quan