我在Oracle中有以下sql查询:
SELECT listagg(A.name, ",") within group (ORDER BY A.id) as A,
listagg(B.name, ",") within group (ORDER BY B.id) as B
FROM some_table
join A on A.id = some_table.id
join B.name = some_table.name
where some_table.status in (1,2,3)
group by some_table.id我的问题是我从listagg中得到了重复的结果,这是我不想要的。我怎么才能修复它呢?谢谢!
发布于 2021-05-02 19:45:26
在Oracle19之前,Oracle不支持用于listagg()的distinct。
然而,在您的例子中,问题可能是由joins的笛卡尔乘积引起的。这表明相关子查询是更好的方法:
select t.*,
(select listagg(a.name, ',') within group (order by a.id)
from A a
where a.id = t.id
) as a,
(select listagg(b.name, ',') within group (order by b.id)
from B b
where b.id = t.id
) as b
from some_table t
where t.status in (1, 2, 3)
group by t.id;发布于 2021-05-02 19:47:10
Listagg函数不支持distinct选项。您应该使用子查询来选择唯一值。
https://stackoverflow.com/questions/67355933
复制相似问题