SQL-将具有上下级关系的表,转换成树形图,并标识各节点的类型(根节点、分支节点、叶子节点)
程序员文章站
2022-04-05 17:11:21
...
需求:将具有上下级关系的表,转换为树形图,并标识各节点的类型(根节点、分支节点、叶子节点)
分析与解答:
根据伪列level
和connect_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排序