SQL Server中按ID分组拼接ValueField字段值的实现问题
解决方案
在SQL Server中,你可以通过STUFF结合FOR XML PATH的方式实现分组拼接字符串,替代MySQL的GROUP_CONCAT。以下是修改后的完整代码:
SELECT inn.ID, STUFF( ( SELECT ', ' + ValueField FROM inn AS sub WHERE sub.ID = inn.ID FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '' ) AS FieldValue FROM ( SELECT te2.Root_ID AS ID, te1.ValueField FROM TableExample2 AS te2 LEFT JOIN TableExample1 te1 ON te2.te1ID = te1.ID WHERE te1.Deleted = 0 GROUP BY te2.Root_ID, te1.ValueField UNION ALL SELECT ID, ValueField FROM TableExample1 AS main WHERE ID IS NOT NULL ) AS inn GROUP BY inn.ID
关键部分说明
- FOR XML PATH(''):将同一ID下的所有
ValueField值以,为分隔符拼接成一段XML文本,结果类似, FV1, FV55, FV66。 - TYPE 与 .value('.', 'NVARCHAR(MAX)'):将XML文本转换为普通字符串,同时避免特殊字符(如&、<、>)被转义,保证拼接结果的准确性。
- STUFF函数:移除拼接结果开头多余的
,(从第1个字符开始,删除2个字符长度),得到干净的拼接字符串。
如果需要对ValueField进行去重(比如UNION ALL结果中存在重复值),可以在子查询中添加DISTINCT:
SELECT ', ' + DISTINCT ValueField FROM inn AS sub WHERE sub.ID = inn.ID FOR XML PATH(''), TYPE
内容的提问来源于stack exchange,提问作者MarkKoli
相关产品推荐
相关产品推荐

