首页 > 数据库 > mysql教程 > 如何在 T-SQL 中将多个审阅者的名字连接成单个逗号分隔的字符串?

如何在 T-SQL 中将多个审阅者的名字连接成单个逗号分隔的字符串?

Susan Sarandon
发布: 2025-01-15 07:54:43
原创
401 人浏览过

How to Concatenate Multiple Reviewers' First Names into a Single Comma-Separated String in T-SQL?

T-SQL中多个记录字段的组合

在T-SQL中,经常需要根据另一个字段对多个记录的字段进行分组。考虑以下场景:

您有三个表:ReviewsReviewersUsersReviews表包含ReviewIDReviewDateReviewers表包含ReviewerIDReviewIDUserID。最后,Users表包含UserIDFNameLName

挑战:

您希望显示一个评论列表,每个列表都包含其相应的评论日期和与该评论关联的所有审稿人的逗号分隔的姓名列表。期望的输出如下所示:

<code>ReviewID---ReviewDate----Users
----------------------------
1----------12/1/2009-----Bob, Joe, Frank
2----------12/9/2009-----Sue, Alice</code>
登录后复制

而不是:

<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>
登录后复制

解决方案:

解决此问题的一种方法是使用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>
登录后复制

以下是查询的细分:

  • 第1行:Reviews表中选择必要的列:ReviewIDReviewDate

  • 第4-9行: 使用子查询来检索每个评论的逗号分隔的姓名列表。

    • 子查询根据UserID连接UsersReviewers表。
    • 它选择FName列并在每个名称后连接一个逗号。
    • FOR XML PATH('')部分将结果聚合到单个字符串中。
  • 第10行: 子查询的结果被指定别名为Users

This revised output clarifies the alias and improves readability. The core functionality remains the same, efficiently concatenating reviewer first names into a comma-separated string.

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板