找出部门表所有层次关系

wjf8882300 2016-04-08 04:13:35
有一张部门表

我现在要找出这张表所有的关系,怎么写?查出来结果类似如下:
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.部门名称;

这张方法在部门固定的时候还可以这么弄,如果部门不固定,或者有几十上百个部门的话,这张方法肯定不行。不知道大家有没有什么高招?
...全文
391 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2016-04-09
  • 打赏
  • 举报
回复
类似于这种效果??
with table1 as
(
select 'A2' col1, '000100010001' col2 from dual union all
select 'A1' col1, '00010001' col2 from dual union all
select 'A' col1, '0001' col2 from dual union all
select 'B1' col1, '00020001' col2 from dual union all
select 'B' col1, '0002' col2 from dual union all
select 'C' col1, '0003' col2 from dual 
)
select * from table1 a 
full join table1 b on a.col2 like b.col2||'____' 
full join table1 c on b.col2 like c.col2||'____'
where c.col2 is not null
order by c.col2, b.col2, a.col2
wjf8882300 2016-04-09
  • 打赏
  • 举报
回复
自己顶下,不能沉了

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧