Maison >base de données >tutoriel mysql >Comment concaténer des e-mails par ReportId à l'aide de GROUP BY et STUFF() de SQL Server ?

Comment concaténer des e-mails par ReportId à l'aide de GROUP BY et STUFF() de SQL Server ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 17:38:411025parcourir

How to Concatenate Emails by ReportId Using SQL Server's GROUP BY and STUFF()?

Agrégation d'e-mails dans SQL Server : une solution GROUP BY et STUFF()

La clause GROUP BY de SQL Server est puissante pour résumer les données. Une tâche fréquente consiste à combiner les valeurs de plusieurs lignes en une seule chaîne, souvent séparées par des virgules. Ceci est géré efficacement à l'aide de fonctions telles que STUFF().

Illustrons avec un exemple de tableau de rapport des employés :

ID ReportId Email
1 1 john@example.com
2 2 mary@example.com
3 1 jane@example.com
4 3 david@example.com
5 3 susan@example.com

Pour concaténer les e-mails associés à chaque ReportId, en utilisant des virgules comme séparateurs, cette requête fonctionne :

<code class="language-sql">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;</code>

La fonction STUFF() modifie une chaîne. Il faut quatre arguments : la chaîne, la position de départ, le nombre de caractères à supprimer et la chaîne de remplacement.

La requête externe regroupe par ReportId. La requête interne, utilisant FOR XML PATH(''), concatène les e-mails pour chaque groupe. STUFF() supprime ensuite la virgule et l'espace de début.

Résultat de la requête :

ReportId Email
1 john@example.com, jane@example.com
2 mary@example.com
3 david@example.com, susan@example.com

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn