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

SQL Server中不使用WITH实现STRING_AGG去重聚合

解决办法

情况1:使用SQL Server 2022及以上版本

SQL Server 2022开始支持在STRING_AGG()中直接使用DISTINCT关键字,无需额外子查询即可完成去重聚合:

SELECT 
    your_group_column,
    ROUND(AVG(ins.Evaluation), 2) AS evaluation,
    STRING_AGG(DISTINCT your_agg_column, ',') AS unique_aggregated_values
FROM your_table ins
GROUP BY your_group_column

情况2:使用SQL Server 2022以下版本(且不能用WITH)

通过嵌套派生表先对要聚合的字段去重,再关联主查询结果完成聚合:

SELECT 
    main.your_group_column,
    main.evaluation,
    STRING_AGG(sub.unique_value, ',') AS unique_aggregated_values
FROM (
    -- 先计算分组后的AVG值,确保这部分结果唯一
    SELECT 
        your_group_column,
        ROUND(AVG(Evaluation), 2) AS evaluation
    FROM your_table
    GROUP BY your_group_column
) main
-- 派生表取出每个分组下的唯一聚合字段值
JOIN (
    SELECT DISTINCT 
        your_group_column,
        your_agg_column AS unique_value
    FROM your_table
) sub ON main.your_group_column = sub.your_group_column
GROUP BY main.your_group_column, main.evaluation

关键说明

原查询出现重复是因为STRING_AGG()会聚合所有匹配行的字段值,即使存在重复,外层的GROUP BY和DISTINCT无法直接作用于聚合函数内部的重复值。嵌套派生表的方式先在子查询中完成去重,再将唯一值传入STRING_AGG(),确保最终聚合结果无重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:45:56