在父子关系上创建层次结构

时间:2021-02-15 10:23:10

标签: sql oracle hierarchical-data

考虑一个包含以下信息的表格。 父子关系数据。 表格数据:

<头>
Child_Cd 名称 Head_Name Head_Rank Parent_Cd
2 DEF BBB 01 1
3 GHI ZZZ 02 1
4 JFK XXX 10 2

示例:

CREATE TABLE TEST_01 
   (  CHILD_CD NUMBER(5) NOT NULL, 
      NAME VARCHAR2(3), 
      HEAD_NAME VARCHAR2(3), 
      HEAD_RANK VARCHAR2(2), 
      PARENT_CD NUMBER(5) NOT NULL
   );

insert into test_01 (CHILD_CD, NAME, HEAD_NAME, HEAD_RANK, PARENT_CD)
values (2, 'DEF', 'BBB', '01', 1);

insert into test_01 (CHILD_CD, NAME, HEAD_NAME, HEAD_RANK, PARENT_CD)
values (3, 'GHI', 'ZZZ', '02', 1);

insert into test_01 (CHILD_CD, NAME, HEAD_NAME, HEAD_RANK, PARENT_CD)
values (4, 'JFK', 'XXX', '10', 2);

commit;

我们的最终输出需要存储为如下所示的层次结构。

<头>
Code_ID 名称 Head_Name Head_Rank L1_Code L2_Code L3_Code .. L12_Code R_ID LVL_CNT
1 ABC XYZ 07 1 0
1 ABC XYZ 07 2 2 1
1 ABC XYZ 07 2 4 4 2
1 ABC XYZ 07 3 3 1
2 DEF BBB 01 2 0
2 DEF BBB 01 4 4 1
3 GHI ZZZ 02 3 0
4 JFK XXX 10 4 0

这里,R_ID -> 获取层次结构的最后一个 CODE_ID。 LVL_CNT -> 取 R_ID 相对于主 CODE_ID 的最大层级计数。

级别“1”的 Child_Cd 未存储在此处,因为它们没有“1”的 Parent_Cd。所以我想知道是否可以使用 SQL 查询而不是编写一些匿名块来实现结果?

0 个答案:

没有答案