Maison > base de données > tutoriel mysql > Comment puis-je concaténer plusieurs valeurs dans une chaîne séparée par des virgules à l'aide de GROUP BY dans SQL Server ?

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

Mary-Kate Olsen
Libérer: 2025-01-10 17:37:45
original
273 Les gens l'ont consulté

How Can I Concatenate Multiple Values into a Comma-Separated String Using GROUP BY in SQL Server?

Agrégation de données avec des chaînes séparées par des virgules dans SQL Server

La clause GROUP BY de SQL Server est excellente pour l'agrégation de données. Mais comment combiner plusieurs valeurs de lignes regroupées en une seule chaîne séparée par des virgules ?

Le défi :

Imaginez une table comme celle-ci :

<code>ID    ReportId     Email
1     1            a@domain.com
2     2            b@domain.com
3     1            c@domain.com
4     3            d@domain.com
5     3            e@domain.com</code>
Copier après la connexion

L'objectif est de regrouper par ReportId et de concaténer les e-mails dans une liste séparée par des virgules pour chaque rapport.

Solution : Sous-requête et FOR XML PATH

Voici comment y parvenir à l'aide d'une sous-requête et de la méthode FOR XML PATH :

<code class="language-sql">SELECT ReportId, Email = 
    STUFF((SELECT ', ' + Email
           FROM table_name b 
           WHERE b.ReportId = a.ReportId 
          FOR XML PATH('')), 1, 2, '')
FROM table_name a
GROUP BY ReportId;</code>
Copier après la connexion

Explication :

  • Sous-requête : L'instruction interne SELECT récupère tous les e-mails associés à un ReportId spécifique.
  • POUR XML PATH(''): Cette fonction convertit les résultats de l'e-mail en une chaîne XML, avec chaque e-mail comme un nœud distinct. Le '' garantit qu'aucun nœud parent n'est créé.
  • STUFF : La fonction STUFF supprime la virgule de début et l'espace ajoutés par l'instruction SELECT, ce qui donne une chaîne propre séparée par des virgules.

Résultat :

La requête produira le résultat suivant :

<code>ReportId     Email
1            a@domain.com, c@domain.com
2            b@domain.com
3            d@domain.com, e@domain.com</code>
Copier après la connexion

Cela consolide efficacement plusieurs adresses e-mail en une seule chaîne séparée par des virgules pour chacune ReportId. Bien que cette approche fonctionne bien, envisagez d'explorer d'autres fonctions spécifiques à la base de données telles que STRING_AGG (disponible dans les versions ultérieures de SQL Server) pour des solutions potentiellement plus efficaces.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal