WITH a AS (SELECT '001' ID , 'a' NAME FROM dual
UNION ALL
SELECT '001002' ID , 'b' NAME FROM dual
UNION ALL
SELECT '001003' ID , 'c' NAME FROM dual
UNION ALL
SELECT '001002001' ID , 'd' NAME FROM dual
UNION ALL
SELECT '002' ID , 'f' NAME FROM dual
UNION ALL
SELECT '002001' ID , 'e' NAME FROM dual
)
SELECT ID,MIN(NAME ) FROM
(
SELECT ID, SYS_CONNECT_BY_PATH(D.name, '/') NAME FROM a d
CONNECT BY prior d.id = substr(d.id, 0, length(d.id) - 3) )
c GROUP BY ID
UNION ALL
SELECT '001002' ID , 'b' NAME FROM dual
UNION ALL
SELECT '001003' ID , 'c' NAME FROM dual
UNION ALL
SELECT '001002001' ID , 'd' NAME FROM dual
UNION ALL
SELECT '002' ID , 'f' NAME FROM dual
UNION ALL
SELECT '002001' ID , 'e' NAME FROM dual
)
SELECT ID,MIN(NAME ) FROM
(
SELECT ID, SYS_CONNECT_BY_PATH(D.name, '/') NAME FROM a d
CONNECT BY prior d.id = substr(d.id, 0, length(d.id) - 3) )
c GROUP BY ID
本文展示了一个使用SQL进行复杂查询的例子,通过递归查询和分组操作来整理具有层级关系的数据。具体包括如何利用WITH子句定义临时表,使用SYS_CONNECT_BY_PATH连接路径,并按ID分组获取最小名称。
892

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



