语法:
Oracle函数:SYS_CONNECT_BY_PATH主要用于层次查询)以及多列转行。
用法:
select … sys_connect_by_path(column_name,’/’) from table
start with … connect by … prior
1.测试数据
With tt as (
select 1 id,'AA' name, 0 pid, 1 level_ from dual
UNION select 2 id,'BB' name, 1 pid ,2 level_ from dual
UNION select 3 id,'CC' name, 1 pid ,2 level_ from dual
UNION select 4 id,'DD' name, 1 pid ,2 level_ from dual
UNION select 5 id,'EE' name, 2 pid ,3 level_ from dual
UNION select 6 id,'FF' name, 3 pid ,3 level_ from dual
UNION select 7 id,'GG' name, 4 pid ,3 level_ from dual
UNION select 8 id,'HH' name, 4 pid ,3 level_ from dual
)
2.执行函数
select SYS_CONNECT_BY_PATH(tt.name, '/') ,id,name ,level_ from tt
start with tt.id = 1
connect by prior tt.id = tt.pid;
3.测试结果:
Level 关键字 获取第2层级数据
With tt as (
select 1 id,'AA' name, 0 pid, 1 level_ from dual
UNION select 2 id,'BB' name, 1 pid ,2 level_ from dual
UNION select 3 id,'CC' name, 1 pid ,2 level_ from dual
UNION select 4 id,'DD' name, 1 pid ,2 level_ from dual
UNION select 5 id,'EE' name, 2 pid ,3 level_ from dual
UNION select 6 id,'FF' name, 3 pid ,3 level_ from dual
UNION select 7 id,'GG' name, 4 pid ,3 level_ from dual
UNION select 8 id,'HH' name, 4 pid ,3 level_ from dual
)
select SYS_CONNECT_BY_PATH(tt.name, '/') ,id,name ,level_ from tt where level=2
start with tt.id = 1
connect by prior tt.id = tt.pid;