有一张部门表

我现在要找出这张表所有的关系,怎么写?查出来结果类似如下:
id 部门1 部门2 部门3
3 佛山禅城理财营业部 团队A 团队A1
2 null 团队A 团队A1
1 null null 团队A1
其实我要做的就是找出所有关系,部门之间的依赖关系如下:部门1——>部门2——>部门3。
本来想用递归查询,但递归每次只能取出一条关系链,没有办法取出所有关系链。
下面是只能查出一条关系链的递归查询:
select max(decode(s.dept_type, '01', s.dept_name, '')) "部门1",
max(decode(s.dept_type, '02', s.dept_name, '')) "部门2",
max(decode(s.dept_type, '03', s.dept_name, '')) "部门3"
from bao_t_dept_info s
start with s.dept_type = '03'
connect by s.id = prior s.parent_id;
在网上看见有网友用一种比较笨的方法是穷尽所有部门,如:
WITH B1 AS(
SELECT 部门名称,部门名称 一级部门,'' 二级部门,'' 三级部门,'' 四级部门,'' 五级部门 FROM 部门表 WHERE 层级=0),
B2 AS(
SELECT B.部门名称,B1.一级部门,B.部门名称 二级部门,'' 三级部门,'' 四级部门,'' 五级部门 FROM B1 JOIN 部门表 B ON B.上级部门ID=B1.部门名称 WHERE B.层级=1),
B3 AS(
SELECT B.部门名称,B2.一级部门,B2.二级部门,B.部门名称 三级部门,'' 四级部门,'' 五级部门 FROM B2 JOIN 部门表 B ON B.上级部门ID=B2.部门名称 WHERE B.层级=2),
B4 AS(
SELECT B.部门名称,B3.一级部门,B3.二级部门,B3.三级部门,B.部门名称 四级部门,'' 五级部门 FROM B3 JOIN 部门表 B ON B.上级部门ID=B3.部门名称 WHERE B.层级=3),
B5 AS(
SELECT B.部门名称,B4.一级部门,B4.二级部门,B4.三级部门,B4.四级部门,B.部门名称 五级部门 FROM B4 JOIN 部门表 B ON B.上级部门ID=B4.部门名称 WHERE B.层级=4),
B AS(
SELECT * FROM B1
UNION ALL
SELECT * FROM B2
UNION ALL
SELECT * FROM B3
UNION ALL
SELECT * FROM B4
UNION ALL
SELECT * FROM B5)
SELECT ID,姓名,一级部门,二级部门,三级部门,四级部门,五级部门 FROM B JOIN 员工表 Y ON Y.部门=B.部门名称;
这张方法在部门固定的时候还可以这么弄,如果部门不固定,或者有几十上百个部门的话,这张方法肯定不行。不知道大家有没有什么高招?