Combinaison de plusieurs champs d'enregistrement en T-SQL
En T-SQL, il est souvent nécessaire de regrouper des champs de plusieurs enregistrements en fonction d'un autre champ. Considérez le scénario suivant :
Vous disposez de trois tableaux : Avis, Évaluateurs et Utilisateurs. La table Reviews contient ReviewID et ReviewDate. La table Reviewers contient ReviewerID, ReviewID et UserID. Enfin, la table Utilisateurs contient UserID, FName et LName.
Défi :
Vous souhaitez afficher une liste d'avis, chacun contenant sa date d'avis correspondante et une liste de noms de tous les évaluateurs associés à cet avis, séparés par des virgules. Le résultat souhaité ressemble à ceci :
<code>ReviewID---ReviewDate----Users ---------------------------- 1----------12/1/2009-----Bob, Joe, Frank 2----------12/9/2009-----Sue, Alice</code>
au lieu de :
<code>ReviewID---ReviewDate---User ---------------------------- 1----------12/1/2009----Bob 1----------12/1/2009----Joe 1----------12/1/2009----Frank 2----------12/9/2009----Sue 2----------12/9/2009----Alice</code>
Solution :
Une façon de résoudre ce problème est d'utiliser la méthode FOR XML PATH('') :
<code class="language-sql">SELECT *, ( SELECT u.FName + ',' FROM @Users u INNER JOIN @Reviewers rs ON u.UserID = rs.UserID WHERE rs.ReviewID = r.ReviewID FOR XML PATH('') ) AS Users FROM @Reviews r</code>
Voici une répartition de la requête :
Ligne 1 : Sélectionnez les colonnes nécessaires dans le tableau Reviews : ReviewID et ReviewDate.
Lignes 4 à 9 : Utilisez une sous-requête pour récupérer une liste de noms séparés par des virgules pour chaque commentaire.
Ligne 10 : Le résultat de la sous-requête est alias Utilisateurs.
Cette sortie révisée clarifie l'alias et améliore la lisibilité. La fonctionnalité de base reste la même, concaténant efficacement les prénoms des réviseurs dans une chaîne séparée par des virgules.
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!