2012-10-01 110 views
50
を取得する

可能性の重複:私は、クエリを作成するために探していますが、どういうわけか、私はそうすることができません
SQL group_concat function in SQL ServerSQL Serverの: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グループ化連結機能・イン・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