WITH t AS
(SELECT '1,2,3,4' a, 1 b
FROM Dual
UNION ALL
SELECT '1,2,3' a, 2 b FROM Dual),
p AS
(SELECT 1 c, 'A' d
FROM Dual
UNION ALL
SELECT 2 c, 'B'
FROM Dual
UNION ALL
SELECT 3 c, 'C'
FROM Dual
UNION ALL
SELECT 4 c, 'D' FROM Dual)
SELECT t.b, Listagg(d, ',') Within GROUP(ORDER BY d)
FROM p,
(SELECT b, Regexp_Substr(a, '[^,]+', 1, LEVEL) i
FROM t
CONNECT BY LEVEL <= Regexp_Count(a, ',') + 1
GROUP BY b, a, LEVEL) t
WHERE t.i = p.c
GROUP BY t.b
转载来至:http://www.cnblogs.com/wolil/p/7575467.html
实际使用有个问题:即t查询内部需要使用where rownum<10000(某个值)才能查询出来,不知道为啥,慎用!!!
本文深入探讨了使用WITH子句和连接查询在Oracle数据库中进行复杂数据处理的方法,通过具体示例展示了如何利用Listagg函数和正则表达式进行数据聚合与筛选。
6万+

被折叠的 条评论
为什么被折叠?



