在 SQL Server 中使用逗号分隔的字符串聚合数据
SQL Server 的 GROUP BY
子句非常适合数据聚合。 但是如何将分组行中的多个值组合成一个以逗号分隔的字符串?
挑战:
想象一个这样的桌子:
<code>ID ReportId Email 1 1 a@domain.com 2 2 b@domain.com 3 1 c@domain.com 4 3 d@domain.com 5 3 e@domain.com</code>
目标是按 ReportId
进行分组,并将电子邮件连接到每个报告的逗号分隔列表中。
解决方案:子查询和 FOR XML PATH
以下是如何使用子查询和 FOR XML PATH
方法来实现此目的:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM table_name b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM table_name a GROUP BY ReportId;</code>
说明:
SELECT
语句检索与特定 ReportId
关联的所有电子邮件。''
确保不会创建父节点。STUFF
函数删除 SELECT
语句添加的前导逗号和空格,从而产生干净的逗号分隔字符串。结果:
查询将产生以下输出:
<code>ReportId Email 1 a@domain.com, c@domain.com 2 b@domain.com 3 d@domain.com, e@domain.com</code>
这有效地将多个电子邮件地址合并为每个 ReportId
的单个逗号分隔字符串。 虽然这种方法效果很好,但请考虑探索其他特定于数据库的函数,例如 STRING_AGG
(在更高的 SQL Server 版本中可用),以获得可能更有效的解决方案。
以上是如何在 SQL Server 中使用 GROUP BY 将多个值连接成逗号分隔的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!