SQL-将具有上下级关系的表,转换成树形图,并标识各节点的类型(根节点、分支节点、叶子节点)

需求:将具有上下级关系的表,转换为树形图,并标识各节点的类型(根节点、分支节点、叶子节点)

分析与解答:

根据伪列levelconnect_by_isleaf的值进行判断即可

select
level,
(lpad(' ',(level-1)*2,' ')||empno)  树形图,   --根据层级左填充空格,以展示树形
empno,
ename,
connect_by_isleaf 是否有,    --1无0有
(case connect_by_isleaf when 1 then '没有子树'
else '有子树' end) 是否有子树,
--节点类型,根据伪列level和connect_by_isleaf判断
decode(level,1,1) 根节点,   --level和1相等,则返回1
(case when (connect_by_isleaf=0 and level>1) then 1 end) 分支节点,
decode(connect_by_isleaf,1,1) 叶子节点,
--
sal,
hiredate,
mgr,
(prior ename) as mgr_name,
(prior sal) mgr_sal
from emp 
start with mgr is null
connect by (prior empno)=mgr
order siblings by empno;    --在转换成树形图之后,根据树形关系排序
--order by empno     --根据查询结果的empno排序

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/105307061