在我的SQL结果中,我有多行,每行都有一个包含非唯一ID列表的列。
我需要使它们唯一,但是我遇到了麻烦,因为我无法在包含另一个聚合函数的子查询上使用聚合函数。
这是我的简化示例,导致
无法对包含以下内容的表达式执行聚合函数 聚合或子查询。
WITH cte_1 AS (
SELECT 1 AS rownum,
'1,2,2,3,3,3,4,5,6' as ids
)
SELECT rownum,
ids,
string_agg(
(
SELECT DISTINCT value FROM STRING_SPLIT(ids,',')
), ',') AS ids2
FROM cte_1
我宁愿不使用用户定义的函数,但我怀疑我可能必须这样做。
[Edit1]
为清楚起见,以下是示例,但显示了多行:
WITH cte_1 AS (
SELECT 1 AS rownum,
'1,2,2,3,3,3,4,5,6' as ids
UNION ALL
SELECT 2 AS rownum,
'1,1,2,2,2,3,5,5,6' as ids
)
SELECT rownum,
ids,
string_agg(
(
SELECT DISTINCT value FROM STRING_SPLIT(ids,',')
), ',') AS ids2
FROM cte_1
[Edit2]
为了更加清晰地了解需要它的人,上面的示例公用表表达式包含硬编码值,而实际数据集则没有。
我不会粘贴到产生我的结果集的整个查询中,因为这会很直观。我需要的是一种从结果的一列中删除重复值的方法,这些值实际上不是硬编码的,而是由动态数据产生的。
答案 0 :(得分:1)
您可以尝试一下。
WITH cte_1 AS (
SELECT 1 AS rownum,
'1,2,2,3,3,3,4,5,6' as ids
)
SELECT rownum,
ids,
( select string_agg(value, ',') ids2 FROM ( SELECT DISTINCT value FROM STRING_SPLIT(ids,',') ) X ) ids2
FROM cte_1