欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-05 17:11:21
...

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

分析与解答:

根据伪列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排序

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

相关标签: SQL 数据库 sql