2012-10-01 42 views
50

thể trùng lặp:
SQL group_concat function in SQL ServerSQL Server: mệnh đề GROUP BY để có được giá trị bằng dấu phẩy

Tôi đang tìm kiếm để tạo ra một truy vấn nhưng bằng cách nào đó tôi không thể làm như vậy. Bất cứ ai có thể vui lòng giúp tôi ra khỏi đây?

Dữ liệu gốc

ID ReportId  Email 
1  1   [email protected]a.com 
2  2   [email protected] 
3  1   [email protected] 
4  3   [email protected] 
5  3   [email protected] 

Tôi muốn nhóm bởi ReportId, nhưng tất cả các email nên được dấu phẩy tách ra. Vì vậy, kết quả nên là:

ReportId  Email 
1   [email protected], [email protected] 
2   [email protected] 
3   [email protected], [email protected] 

Cách tốt nhất để làm điều này là gì?

Tôi đang thử nhóm theo mệnh đề nhưng nếu có bất kỳ điều gì khác thì tôi đang mở để thực hiện điều đó. Tôi thực sự đánh giá cao thời gian của bạn và giúp đỡ về điều này. Cảm ơn bạn.

+0

và [sql-group-concat chức năng-in-sql-server] (http: //stackoverflow.com/questions/8868604/sql-group-concat-function-in-sql-server) – gts

Trả lời

112

thử điều này:

SELECT ReportId, Email = 
    STUFF((SELECT ', ' + Email 
      FROM your_table b 
      WHERE b.ReportId = a.ReportId 
      FOR XML PATH('')), 1, 2, '') 
FROM your_table a 
GROUP BY ReportId 


SQL fiddle demo

+1

Cảm ơn tuyệt vời .... – user867198

+1

superbbbbbb ........ –

+5

@joe có cách nào khác hiệu quả để thực hiện việc này không? Tôi có một bảng với 30.000 hồ sơ và nó mất 20 giây ... – yogi

13
SELECT [ReportId], 
     SUBSTRING(d.EmailList,1, LEN(d.EmailList) - 1) EmailList 
FROM 
     (
      SELECT DISTINCT [ReportId] 
      FROM Table1 
     ) a 
     CROSS APPLY 
     (
      SELECT [Email] + ', ' 
      FROM Table1 AS B 
      WHERE A.[ReportId] = B.[ReportId] 
      FOR XML PATH('') 
     ) D (EmailList) 

SQLFiddle Demo

Các vấn đề liên quan