SQL Server:GROUP BY子句用于获取逗号分隔值

use*_*198 77 sql sql-server-2008

可能重复:
SQL Server中的SQL group_concat函数

我想创建一个查询但不知何故我无法这样做.有人可以帮帮我吗?

原始数据

ID    ReportId     Email
1     1            a@a.com
2     2            b@b.com
3     1            c@c.com
4     3            d@d.com
5     3            e@e.com
Run Code Online (Sandbox Code Playgroud)

我想分组ReportId,但所有电子邮件都应以逗号分隔.所以结果应该是:

ReportId     Email
1            a@a.com, c@c.com
2            b@b.com
3            d@d.com, e@e.com
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

我正在尝试group by子句,但如果还有其他任何事情,那么我也愿意实现它.我非常感谢您的时间和帮助.谢谢.

Joe*_*eph 154

试试这个:

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
Run Code Online (Sandbox Code Playgroud)


SQL小提琴演示

  • @joe有没有其他有效的方法呢?我有一张包含30,000条记录的表,它需要20秒...... (9认同)
  • 我知道它很旧的帖子,但如果您使用 SQL Server 2017,您可以使用 STRING_AGG() 函数。 (6认同)

Joh*_*Woo 16

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) 
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示

  • 这对于复杂的连接有效,而另一个则不然。被低估了。 (2认同)