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

在SQL Server中使用STRING_AGG获取唯一值的实现方案

解决SQL Server中STRING_AGG聚合重复值的问题

问题背景

你当前的查询通过STRING_SPLIT拆分bID字段后得到了包含重复值的结果,直接使用STRING_AGG聚合会保留这些重复项,但你需要每个ProjectID对应的唯一值拼接结果。

解决方案:先去重再聚合

核心思路是先对拆分后的value按ProjectID去重,再执行STRING_AGG聚合操作。这里提供两种可行的写法:

方法一:用子查询+DISTINCT先去重

SELECT 
    ProjectID, 
    STRING_AGG(newID.value, ', ') WITHIN GROUP (ORDER BY newID.value) AS NewField
FROM (
    SELECT DISTINCT 
        ProjectID, 
        newID.value
    FROM [dbo].[Data] WITH(NOLOCK)
    CROSS APPLY STRING_SPLIT([bID], ';') AS newID
    WHERE newID.value IN ('O95833', 'Q96NY7-2')
) AS temp
GROUP BY ProjectID
ORDER BY ProjectID;

方法二:GROUP BY同时按ProjectID和value去重

SELECT 
    ProjectID, 
    STRING_AGG(value, ', ') WITHIN GROUP (ORDER BY value) AS NewField
FROM [dbo].[Data] WITH(NOLOCK)
CROSS APPLY STRING_SPLIT([bID], ';') AS newID
WHERE newID.value IN ('O95833', 'Q96NY7-2')
GROUP BY ProjectID, newID.value
ORDER BY ProjectID;

预期结果

执行上述任一查询后,会得到你想要的无重复聚合结果:

ProjectID NewField
-------------------------------
2         O95833, Q96NY7-2
4         Q96NY7-2

原查询问题分析

原来的查询直接对拆分后的所有重复值进行聚合,没有先过滤重复项。通过先对ProjectID和value做去重处理(无论是DISTINCT还是GROUP BY),确保每个ProjectID下的每个value只出现一次,再聚合就能得到唯一值拼接的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:11