You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何通过变量累加拼接列的非重复元素?

解决SQL Server中拼接非重复列值的问题

嘿,这个坑我之前踩过!直接在select后面加distinct和变量累加一起用确实不会生效,因为SQL Server里这种变量逐行累加的逻辑,和distinct的执行顺序不对——它会先把所有行的值都累加到变量里,再去重,这时候早就晚啦。

给你两种可行的解决办法:

方法一:先去重再拼接(兼容旧版SQL Server)

先通过子查询把Column的非重复值筛选出来,再对这个干净的结果集做变量累加:

declare @car varchar(max)=''; 
select @car+=QUOTENAME(Column)+',' 
from (select distinct Column from TABLE) as DistinctColumns
set @car = SUBSTRING(@car, 1, len(@car)-1) 
print @car

这样就能保证只有不重复的Column值被拼接到@car里了。

方法二:用STRING_AGG函数(SQL Server 2017+推荐)

如果你的SQL Server版本是2017及以上,用内置的STRING_AGG会更简洁,还不用手动处理最后多余的逗号:

declare @car varchar(max);
select @car = STRING_AGG(QUOTENAME(Column), ',')
from (select distinct Column from TABLE) as DistinctColumns
print @car

这个函数专门用来做字符串聚合,直接就能把去重后的列值按指定分隔符拼接好,省心多了。

简单总结下:核心思路就是先对数据源去重,再执行拼接操作,而不是把去重和拼接混在一起做~

内容的提问来源于stack exchange,提问作者Songo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:12:38