2012-10-01 210 views
50

可能重複:
SQL group_concat function in SQL ServerSQL服務器:GROUP BY子句,以獲得逗號分隔值

我期待創建一個查詢,但不知何故,我不能這樣做。任何人都可以請幫我在這裏?

原始數據

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

我想按ReportId,但所有的電子郵件應該用逗號隔開。所以結果應該是:

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

這樣做的最佳方法是什麼?

我正在嘗試group by子句,但如果還有其他東西,那麼我也可以實現這一點。我非常感謝你的時間和幫助。謝謝。

+0

和[SQL-基的concat函數式-SQL服務器(HTTP: //stackoverflow.com/questions/8868604/sql-group-concat-function-in-sql-server) – gts

回答

112

嘗試:

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

非常感謝.... – user867198

+1

superbbbbbb ........ –

+5

@joe還有其他有效的方法嗎?我有一張有30,000條記錄的桌子,需要20秒... – 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