Oracle树形结构数据---常见处理情景
1.查看表数据结构
SELECT *
FROM QIANCODE.TREE_HIS_TABLE T
ORDER BY T.NODE_LEVEL;
其中:NODE_SID_DESC显示的是当前行中节点的‘节点详情’。
部分数据如下图所示:
2.树形结构数据--处理情景
处理情景一:查询出某个节点下的所有叶子节点
查询代码如下:
SELECT *
FROM(SELECT A.RN
,A.NODE_CODE
,A.NODE_NAME
,A.NODE_PID
,A.NODE_SID_DESC
,LEAD(A.LEVELSS) OVER(ORDER BY RN) AA
--1.2只有叶子节点才有 AA<=A.LEVELSS,即找出所有的叶子节点
,CASE
WHEN LEAD(A.LEVELSS) OVER(ORDER BY RN)>A.LEVELSS THEN
0
ELSE
1
END LEAF
--1.1查找某节点及该节点下的所有子孙节点
FROM(SELECT ROWNUM RN
,T.NODE_CODE
,T.NODE_NAME
,T.NODE_PID
,T.NODE_SID_DESC
,LEVEL LEVELSS
FROM QIANCODE.TREE_HIS_TABLE T
START WITH T.NODE_CODE='1'
CONNECT BY PRIOR T.NODE_CODE=T.NODE_PID) A
)B
WHERE B.LEAF=1;
查询思路:第一步,通过connect by..start with 查出该节点及该节点下的所有子孙节点,并查出该查询结果下的伪列rownum;
第二步,使用分析函数over(),根据rownum进行排序,LEAD(A.LEVELSS) OVER(ORDER BY RN)>A.LEVELSS查询出当前行的下一行数据对应的层级是否大于当前行的层级,如果下一行数据的层级小于当前行层级,则表明当前行为叶子节点(因为当前数据已经按查询节点下的子孙节点层级组成结构依次排序)。
第三步,查询出所有步骤二中所有叶子节点,即为该查询节点下的所有叶子节点。
----------------------------------==============================更多内容持续更新中==================================================--------------------------
Oracle树形结构数据查询的基本知识请查看:https://www.cnblogs.com/zhoudaqianhahaOracleShuXing111
Oracle窗口函数基本知识请查看: