T-SQL中多个记录字段的组合
在T-SQL中,经常需要根据另一个字段对多个记录的字段进行分组。考虑以下场景:
您有三个表:Reviews、Reviewers和Users。Reviews表包含ReviewID和ReviewDate。Reviewers表包含ReviewerID、ReviewID和UserID。最后,Users表包含UserID、FName和LName。
挑战:
您希望显示一个评论列表,每个列表都包含其相应的评论日期和与该评论关联的所有审稿人的逗号分隔的姓名列表。期望的输出如下所示:
<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表中选择必要的列:ReviewID和ReviewDate。
第4-9行: 使用子查询来检索每个评论的逗号分隔的姓名列表。
第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中文网其他相关文章!