如何在SQL Server中将多行数据合并为单行?
在SQL Server中将单列多行数据合并为一行
嘿,我来帮你搞定这个多行转一行的需求!在SQL Server里,不同版本有不同的便捷方法,我给你分情况说明:
方法1:使用STRING_AGG(SQL Server 2017及以上版本)
这是最简洁的方式,官方提供的聚合函数专门用来做字符串拼接:
SELECT STRING_AGG(RepresentID, ', ') AS CombinedRepresentIDs FROM YourTable;
这里的, 是你可以自定义的分隔符,换成空格、分号或者竖线' | '都没问题。执行后就能得到一行合并后的字符串,比如111122222, 3333344444, 5555566666, ...。
方法2:使用FOR XML PATH(适用于SQL Server 2016及更早版本)
如果你的SQL Server版本比较老,没有STRING_AGG,就用这个经典的XML拼接方法:
SELECT STUFF( (SELECT ', ' + RepresentID FROM YourTable FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '' ) AS CombinedRepresentIDs;
简单解释下逻辑:
FOR XML PATH('')会把每行的', ' + RepresentID拼接成一段XML文本.value('.', 'NVARCHAR(MAX)')把XML格式转换成普通字符串STUFF函数用来去掉开头多余的,(因为第一行前面也会自动加上分隔符,所以从第1位开始删除2个字符)
要是你换了其他分隔符,比如' | ',记得把STUFF的第三个参数改成3(对应分隔符的长度),这样就能精准去掉开头的多余符号了。
测试的时候,只需要把YourTable换成你实际的表名就行~
内容的提问来源于stack exchange,提问作者Kapil
相关产品推荐
相关产品推荐

