Maison >base de données >tutoriel mysql >Comment concaténer des champs de plusieurs enregistrements T-SQL dans une chaîne séparée par des virgules ?

Comment concaténer des champs de plusieurs enregistrements T-SQL dans une chaîne séparée par des virgules ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-15 08:21:43638parcourir

How to Concatenate Fields from Multiple T-SQL Records into a Comma-Separated String?

Regrouper les champs de plusieurs enregistrements par un autre champ en T-SQL

Cet article explorera une technique de regroupement des valeurs de champs associées à plusieurs enregistrements dans deux tables. En combinant les données des tables Reviews, Reviewers et Users, nous pouvons concaténer les champs FName en une chaîne séparée par des virgules.

<code class="language-sql">-- 示例数据
DECLARE @Reviews TABLE(
        ReviewID INT,
        ReviewDate DATETIME
)

DECLARE @Reviewers TABLE(
        ReviewerID   INT,
        ReviewID   INT,
        UserID INT
)

DECLARE @Users TABLE(
        UserID  INT,
        FName  VARCHAR(50),
        LName VARCHAR(50)
)

INSERT INTO @Reviews SELECT 1, '12 Jan 2009'
INSERT INTO @Reviews SELECT 2, '25 Jan 2009'

INSERT INTO @Users SELECT 1, 'Bob', ''
INSERT INTO @Users SELECT 2, 'Joe', ''
INSERT INTO @Users SELECT 3, 'Frank', ''
INSERT INTO @Users SELECT 4, 'Sue', ''
INSERT INTO @Users SELECT 5, 'Alice', ''

INSERT INTO @Reviewers SELECT 1, 1, 1
INSERT INTO @Reviewers SELECT 2, 1, 2
INSERT INTO @Reviewers SELECT 3, 1, 3
INSERT INTO @Reviewers SELECT 4, 2, 4
INSERT INTO @Reviewers SELECT 5, 2, 5</code>

Solution utilisant SELECT et FOR XML PATH()

En utilisant l'opérateur FOR XML PATH(), nous pouvons concaténer les valeurs FName en une seule chaîne :

<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 UserNames
FROM    @Reviews r</code>

Cette requête renvoie les résultats suivants :

<code>ReviewID  ReviewDate  UserNames
1          12 Jan 2009  Bob,Joe,Frank
2          25 Jan 2009  Sue,Alice</code>

Conclusion

À l'aide de la fonction FOR XML PATH(), nous avons réussi à regrouper les valeurs de champ de plusieurs enregistrements dans différentes tables par un champ commun. Cette technique peut être appliquée aux scénarios dans lesquels des représentations sous forme de chaînes concaténées sont requises.

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