加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle树形结构数据---常见处理情景

发布时间:2020-12-12 13:43:50 所属栏目:百科 来源:网络整理
导读:Oracle树形结构数据---常见处理情景 1.查看表数据结构 SELECT * ? ?? FROM QIANCODE.TREE_HIS_TABLE T ?ORDER BY T.NODE_LEVEL; 其中:NODE_SID_DESC显示的是当前行中节点的‘节点详情’。 部分数据如下图所示: 2.树形结构数据--处理情景 处理情景一:查询

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窗口函数基本知识请查看:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读