Maison >base de données >tutoriel mysql >Comment `STUFF` et `FOR XML PATH` concatènent-ils les noms dans SQL Server pour les ID en double ?
Ce guide montre comment concaténer plusieurs noms associés à des ID en double dans une table SQL Server, ce qui donne lieu à une liste de noms séparés par des virgules pour chaque ID unique. Nous y parviendrons en utilisant la puissante combinaison de STUFF
et FOR XML PATH
.
Scénario :
Imaginez un tableau avec des identifiants en double et les noms correspondants. L'objectif est de créer une nouvelle colonne contenant tous les noms pour chaque identifiant, soigneusement séparés par des virgules.
Solution :
La solution utilise un processus en trois étapes :
Étape 1 : Générer la chaîne XML séparée par des virgules
Le cœur de la solution réside dans l'utilisation de FOR XML PATH('')
pour générer une chaîne séparée par des virgules à partir des noms.
<code class="language-sql">SELECT ',' + name FROM temp1 FOR XML PATH('')</code>
Cela génère une chaîne XML où chaque nom est précédé d'une virgule.
Étape 2 : Supprimer la virgule de début
La chaîne XML résultante de l'étape 1 commence par une virgule inutile. STUFF
supprime cela avec élégance.
<code class="language-sql">STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH('')), 1, 1, '' )</code>
STUFF
remplace le premier caractère (la virgule de début) par une chaîne vide.
Étape 3 : Rejoindre, regrouper et résultat final
Enfin, nous combinons les étapes ci-dessus avec une clause JOIN
et GROUP BY
pour obtenir le résultat souhaité.
<code class="language-sql">SELECT ID, ConcatenatedNames = STUFF( (SELECT ',' + name FROM temp1 t1 WHERE t1.id = t2.id FOR XML PATH ('')) , 1, 1, '') FROM temp1 t2 GROUP BY id;</code>
Cette requête joint la sous-requête (qui génère la chaîne séparée par des virgules) avec la table d'origine (temp1
) basée sur ID
. La clause GROUP BY
garantit que la concaténation a lieu pour chaque identifiant unique. La colonne ConcatenatedNames
résultante contient la liste des noms séparés par des virgules pour chaque identifiant.
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!