在 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中文网其他相关文章!