SQL Server: предложение GROUP BY для получения значений, разделенных запятыми [дубликат]


Возможные Дубликаты:
функция SQL group_concat в SQL Server

Я ищу, чтобы создать запрос, но как-то я не могу этого сделать. Может кто-нибудь помочь мне здесь?

исходные данные

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

каков наилучший способ сделать это?

Я пытаюсь группу по предложению, но если есть что-то еще, то я открыт для реализации этого также. Я очень ценю ваше время и помощь. Спасибо.

2 56

2 ответа:

попробуйте это:

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

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