Snowflake双表关联后错误值去重拼接获取唯一行问题咨询
Snowflake跨表取唯一值拼接SQL调整方案
问题根因
你原有SQL存在两个核心问题导致去重失败:
- 直接拼接两表
ERROR_NAME后再执行聚合,未对跨表的重复错误值做提前去重 - 额外的收尾逗号处理逻辑冗余,Snowflake原生
LISTAGG函数支持直接指定分隔符,无需手动处理
解决方案
提供两种可直接使用的写法:
写法1:逻辑通用兼容性最优
先将两表同ID的错误值合并去重后再聚合,适配所有场景:
SELECT ID, LISTAGG(ERROR_NAME, ',') WITHIN GROUP (ORDER BY ERROR_NAME) AS ERROR_NAME_CUSTOM FROM ( SELECT ID, ERROR_NAME FROM TABLE1 UNION -- UNION自动去重,不要替换为UNION ALL SELECT ID, ERROR_NAME FROM TABLE2 ) t GROUP BY ID
写法2:基于原有JOIN逻辑调整
适合需要保留两表关联逻辑、额外关联字段的场景:
SELECT E.ID, ARRAY_TO_STRING(ARRAY_DISTINCT(ARRAY_CAT(ARRAY_AGG(E.ERROR_NAME), [I.ERROR_NAME])), ',') AS ERROR_NAME_CUSTOM FROM TABLE1 E JOIN TABLE2 I ON I.ID = E.ID GROUP BY E.ID, I.ERROR_NAME
效果说明
以上两种写法都会自动合并两表同ID下的ERROR_NAME并剔除重复值,你示例中ID为2的场景最终输出为2,Er1,Er2,Er4,符合预期。
内容的提问来源于stack exchange,提问作者Payal
相关产品推荐
相关产品推荐

