SQL Server:用于获取逗号分隔值的GROUPBY子句

SQL Server:用于获取逗号分隔值的GROUPBY子句,sql,sql-server-2008,Sql,Sql Server 2008,可能重复: 我希望创建一个查询,但不知何故我无法这样做。有人能帮我吗 原始数据 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 我想按ReportId分组,但所有电子邮件都应该用逗号分隔。因此,结果应该是: ReportId

可能重复:

我希望创建一个查询,但不知何故我无法这样做。有人能帮我吗

原始数据

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
我想按
ReportId
分组,但所有电子邮件都应该用逗号分隔。因此,结果应该是:

ReportId     Email
1            a@a.com, c@c.com
2            b@b.com
3            d@d.com, e@e.com
最好的方法是什么

我正在尝试按条款分组,但如果还有其他事情,我也愿意执行。我真的很感谢你在这方面的时间和帮助。谢谢。

试试这个:

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


还有@joe还有其他有效的方法吗?我有一个包含30000条记录的表,需要20秒…如果你不想用逗号填充空格,你需要使用1,1“,而不是1,2”,你能添加一些关于如何工作的文本吗?我知道这篇文章很老,但如果你使用的是SQL server 2017,你可以使用STRING_AGG()函数。这对复杂联接有效,而另一个则不起作用。被低估了。
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)