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 ?

Comment concaténer des valeurs uniques dans une chaîne séparée par des virgules à l'aide du GROUP BY de SQL Server ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-10 17:47:42159parcourir

How to Concatenate Unique Values into a Comma-Separated String Using SQL Server's GROUP BY?

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

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