104 votes

SQL Server : clause GROUP BY pour obtenir des valeurs séparées par des virgules

Duplicata possible :
Fonction SQL group_concat en SQL Server

Je cherche à créer une requête mais je n'y parviens pas. Quelqu'un peut-il m'aider ?

Les données originales

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

Je veux regrouper par ReportId mais tous les e-mails doivent être séparés par des virgules. Donc le résultat devrait être :

ReportId     Email
1            a@a.com, c@c.com
2            b@b.com
3            d@d.com, e@e.com

Quelle est la meilleure façon de procéder ?

J'essaie d'utiliser la clause group by mais s'il y a une autre solution, je suis prêt à l'appliquer aussi. J'apprécie vraiment votre temps et votre aide. Je vous remercie.

200voto

Joe G Joseph Points 12384

Essayez ceci :

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

Démonstration du bricolage SQL

25voto

John Woo Points 132738
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) 

Démonstration de SQLFiddle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X