Подтвердить что ты не робот

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

Возможный дубликат:
Функция SQL group_concat в SQL Server

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

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

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

4b9b3361

Ответ 1

попробуйте следующее:

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

Ответ 2

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