[英]listagg in oracle sql
我在 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 中得到重复的结果。 我该如何解决? 谢谢!
Oracle 不支持listagg()
的distinct
。
但是,在您的情况下,问题可能是由于join
的笛卡尔积引起的。 这表明相关子查询是一种更好的方法:
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;
Listagg function 不支持 distinct 选项。 您应该对 select 唯一值使用子查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.