在组织的层次结构中获取链和最高父级

时间:2017-07-20 11:23:41

标签: sql oracle hierarchy

我在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中的查询来实现这一目标?

1 个答案:

答案 0 :(得分:1)

可以使用分析DENSE_RANK()函数创建链编号。

链中最高的父级是分层查询的一个特征:函数CONNECT_BY_ROOT()

您的分层表格是非标准的 - 在标准排列中,顶级(组织0105)也会有一行显示为ORG_2,{ {1}} NULL。这样,层次结构中的最高级别很容易找到:只需查找ORG_1。实际上,ORG_1 IS NULL子句更复杂,因为我们必须先找到tops。为此,我们会查找START WITH中未显示的值ORG_1。这是ORG_2子句中子查询中完成的工作。

START WITH