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

SQL Server 如何在STRING_AGG中获取唯一值并保留排序和NULL处理逻辑

解决方案

要实现STRING_AGG返回唯一值,同时保留原有的排序规则、NULL值转<missing>的逻辑,只需要在聚合操作前先对目标字段去重即可,调整后的CROSS APPLY部分代码如下:

CROSS APPLY (
    SELECT attributeOne = STRING_AGG(ISNULL(attributeOne, '<missing>'), ', ') 
    WITHIN GROUP (ORDER BY attributeOne)
    FROM (
        -- 内层先对当前分组的attributeOne去重
        SELECT DISTINCT d.attributeOne
        FROM #bridge b
        JOIN #dim2 d ON d.dim2key = b.dim2key
        WHERE b.groupKey = #fact1.groupKey
    ) AS distinct_attr
) #dim2

逻辑说明

  • 内层嵌套查询先筛选出当前groupKey关联的所有attributeOne,通过DISTINCT完成去重,保留原始NULL值
  • 外层对去重后的结果执行原有逻辑:先把NULL替换为<missing>,再按attributeOne排序后聚合,完全保留原有的业务规则

如果需要保留groupKey为NULL的记录,只需把CROSS APPLY替换为OUTER APPLY即可,外层的ISNULL会自动将聚合结果为NULL的情况替换为<missing>。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:01