首页 >数据库 >mysql教程 >如何将多个 T-SQL 记录中的字段连接成逗号分隔的字符串?

如何将多个 T-SQL 记录中的字段连接成逗号分隔的字符串?

Barbara Streisand
Barbara Streisand原创
2025-01-15 08:21:43636浏览

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

在 T-SQL 中按另一个字段对多个记录的字段进行分组

本文将探讨一种技术,用于对两个表中与多个记录关联的字段值进行分组。通过组合来自 Reviews、Reviewers 和 Users 表的数据,我们可以将 FName 字段连接成逗号分隔的字符串。

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

使用嵌套 SELECT 和 FOR XML PATH() 的解决方案

利用 FOR XML PATH() 运算符,我们可以将 FName 值连接到单个字符串中:

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

此查询返回以下结果:

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

结论

利用 FOR XML PATH() 函数,我们成功地按公共字段对不同表中多个记录的字段值进行了分组。此技术可应用于需要连接字符串表示的场景。

以上是如何将多个 T-SQL 记录中的字段连接成逗号分隔的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn