SQL Server 2014报表避免重复行 无STRING_AGG如何拼接同组字段值
解决方案
SQL Server 2014 不支持 STRING_AGG 函数,你可以使用 FOR XML PATH 搭配 STUFF 函数实现分组字符串拼接需求,完整查询语句如下:
SELECT REF, STUFF(( SELECT ',' + Field1 FROM yourtable t2 WHERE t2.REF = t1.REF FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(100)'), 1, 1, '') AS [Field 1], STUFF(( SELECT ',' + Field2 FROM yourtable t2 WHERE t2.REF = t1.REF FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(100)'), 1, 1, '') AS [Field 2] FROM yourtable t1 GROUP BY REF
语法说明
FOR XML PATH('')会将分组内的多行查询结果拼接为无外层标签的XML字符串,自动把每个值前的逗号拼接在一起,最终生成形如,a,b,c的字符串STUFF函数的作用是删掉字符串开头多余的第一个逗号:参数1为待处理字符串,参数2为删除起始位置,参数3为删除的字符长度,参数4为替换为空字符串- 末尾的
.value('.', 'VARCHAR(100)')可以避免&、<这类特殊字符被自动转义为HTML实体,保证输出内容和原始字段值完全一致 - 外层查询用
GROUP BY REF保证每个REF值仅输出一行
直接基于你提供的测试表执行上述语句,即可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Will F
相关产品推荐
相关产品推荐

