Maison >base de données >tutoriel mysql >Comment concaténer des valeurs uniques dans une chaîne séparée par des virgules à l'aide du GROUP BY de SQL Server ?
Agrégation de valeurs uniques dans une liste séparée par des virgules avec GROUP BY de SQL Server
Défi :
Étant donné une table avec des entrées en double, l'objectif est de regrouper les données par une colonne spécifique et de consolider les valeurs uniques d'une autre colonne en une seule chaîne séparée par des virgules.
Exemples de données :
Le tableau suivant illustre l'ensemble de données initial :
ID | ReportId | |
---|---|---|
1 | 1 | [email protected] |
2 | 2 | [email protected] |
3 | 1 | [email protected] |
4 | 3 | [email protected] |
5 | 3 | [email protected] |
Résultat cible :
Le résultat souhaité est un tableau avec des adresses e-mail consolidées :
ReportId | |
---|---|
1 | [email protected], [email protected] |
2 | [email protected] |
3 | [email protected], [email protected] |
Solution utilisant GROUP BY et STUFF :
La fonction STUFF
est utilisée pour concaténer efficacement des chaînes, en supprimant les caractères principaux. La solution est la suivante :
<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>
Explication détaillée :
La logique de base implique une sous-requête au sein de la fonction STUFF
. Cette sous-requête parcourt toutes les lignes partageant le même ReportId
que la ligne actuelle de la requête externe. Pour chaque ligne correspondante, il ajoute une virgule et la valeur Email
à la chaîne accumulée. La requête externe utilise ensuite GROUP BY
pour agréger ces chaînes d'e-mails concaténées pour chaque ReportId
unique. La fonction STUFF
supprime la virgule et l'espace initiaux.
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!