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 | |
---|---|---|
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 | |
---|---|
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!