我在TABLE_A中有以下数据,其中ORG_1是ORG_2的父代:
ORG_1 ORG_2
01 02
02 03
02 04
05 06
因此,org 01是org 02的父级,org 02是03和04的父级.Org 5是仅org 06的父级。
我需要链的唯一名称/编号,并报告链中最高的父级。我将链定义为“所有彼此相关的组织”。
这是理想的结果:
Chain ORG_1 ORG_2 Highest_Parent_In_Chain
1 01 02 01
1 02 03 01
1 02 04 01
2 05 06 05
Chain = 1具有从ORG_1 = 01开始的树结构。 Chain = 2有它自己的链。
我找到了一些关于CONNECT BY,CONNECT BY PRIOR和CONNECT_BY_ROOT的信息,但我没有得到它。有没有人知道如何通过Oracle中的查询来实现这一目标?
答案 0 :(得分:1)
可以使用分析DENSE_RANK()
函数创建链编号。
链中最高的父级是分层查询的一个特征:函数CONNECT_BY_ROOT()
。
您的分层表格是非标准的 - 在标准排列中,顶级(组织01
和05
)也会有一行显示为ORG_2
,{ {1}} NULL
。这样,层次结构中的最高级别很容易找到:只需查找ORG_1
。实际上,ORG_1 IS NULL
子句更复杂,因为我们必须先找到tops。为此,我们会查找START WITH
中未显示的值ORG_1
。这是ORG_2
子句中子查询中完成的工作。
START WITH