SQL Server中合并varchar与int列并去重聚合的技术求助
解决方案
针对SQL Server 2017及以上版本(支持STRING_AGG函数)
先通过子查询生成去重的拼接字符串,再用STRING_AGG聚合为逗号分隔的结果:
SELECT STRING_AGG(combined_col, ', ') AS final_combined_result FROM ( -- 先拼接列并去重 SELECT DISTINCT CONCAT(learningareacode, ':', CAST(NormalYearLevel AS VARCHAR(10))) AS combined_col FROM your_table -- 替换成你的实际表名 ) AS distinct_data
针对SQL Server 2016及更早版本(无STRING_AGG)
使用STUFF+FOR XML PATH的组合实现字符串聚合,同时通过DISTINCT去重:
SELECT STUFF( ( SELECT DISTINCT ', ' + CONCAT(learningareacode, ':', CAST(NormalYearLevel AS VARCHAR(10))) FROM your_table -- 替换成你的实际表名 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '' -- 去掉开头多余的", " ) AS final_combined_result
注意事项
- 转换
NormalYearLevel为字符串时,指定合适的长度(比如VARCHAR(10)),避免数值过大导致截断。 - 如果列存在
NULL值,可使用ISNULL处理,比如CONCAT(ISNULL(learningareacode, ''), ':', ISNULL(CAST(NormalYearLevel AS VARCHAR(10)), '')),防止拼接结果为NULL。
内容的提问来源于stack exchange,提问作者sai royal
相关产品推荐
相关产品推荐

