SQL Server下按ITEID分组聚合COLORCODE字段以校验数据一致性的查询语句实现
在SQL Server中校验分组后COLORCODE字段一致性的查询方案
嗨,我懂你这种困扰——MySQL里的GROUP_CONCAT用惯了,换到SQL Server突然找不到替代方法确实头疼。下面给你两种实用的方案,完美匹配你要的直观校验需求:
方法一:使用STRING_AGG(推荐,SQL Server 2017及以上版本)
这是SQL Server官方推出的替代GROUP_CONCAT的函数,用法简洁直接,完全能实现你要的效果:
SELECT ITEID, STRING_AGG(DISTINCT COLORCODE, ', ') AS CONCATENATED_COLORCODE FROM 你的数据表名 GROUP BY ITEID ORDER BY ITEID;
- 加上
DISTINCT后,同一个ITEID下重复的COLORCODE会被自动合并,这样如果某个ITEID存在不同的颜色值,就会显示成逗号分隔的列表,一眼就能发现录入错误;如果颜色完全一致,就只会显示单个值,和你给出的预期结果完全一致。 - 如果想保留所有重复的颜色值(比如要确认重复次数),去掉
DISTINCT即可。
方法二:兼容旧版本(SQL Server 2016及以下)
如果你的SQL Server版本比较老,不支持STRING_AGG,可以用FOR XML PATH的经典写法来拼接字符串:
SELECT DISTINCT t.ITEID, STUFF(( SELECT DISTINCT ', ' + COLORCODE FROM 你的数据表名 WHERE ITEID = t.ITEID FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS CONCATENATED_COLORCODE FROM 你的数据表名 t ORDER BY t.ITEID;
这里的STUFF函数是用来去掉拼接结果开头多余的逗号和空格,FOR XML PATH('')会把拼接内容转成XML格式,再通过.value提取成普通字符串,同样支持DISTINCT去重。
小提示
记得把代码里的你的数据表名替换成你实际使用的表名称哦。
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

