Sql 如何将父组ID分配给Oracle 11g中分层表的每个记录?

Sql 如何将父组ID分配给Oracle 11g中分层表的每个记录?,sql,view,oracle11g,hierarchy,Sql,View,Oracle11g,Hierarchy,基于TECH_VALUES表中存在的以下示例层次结构数据,我如何创建一个视图,例如TECH_VALUES_VW,该视图将获取相同的数据,但有一个附加列,即GROUP_ID_PARENT,该列将显示父组ID为0的组ID与子组所属的行,请参见新列数据示例: ID GROUP_ID LINK_ID PARENT_GROUP_ID TECH_TYPE GROUP_ID_PARENT ------- ------------- ------------ -----

基于TECH_VALUES表中存在的以下示例层次结构数据,我如何创建一个视图,例如TECH_VALUES_VW,该视图将获取相同的数据,但有一个附加列,即GROUP_ID_PARENT,该列将显示父组ID为0的组ID与子组所属的行,请参见新列数据示例:

ID      GROUP_ID      LINK_ID      PARENT_GROUP_ID      TECH_TYPE  GROUP_ID_PARENT
------- ------------- ------------ -------------------- ---------- --------------- 
1       100           LETTER_A     0                               100
2       200           LETTER_B     0                               200
3       300           LETTER_C     0                               300
4       400           LETTER_A1    100                  A          100               
5       500           LETTER_A2    100                  A          100               
6       600           LETTER_A3    100                  A          100               
7       700           LETTER_AA1   400                  B          100              
8       800           LETTER_AAA1  700                  C          100             
9       900           LETTER_B2    200                  B          200               
10      1000          LETTER_BB5   900                  B          200              
12      1200          LETTER_CC1   300                  C          300
13      1300          LETTER_CC2   300                  C          300
14      1400          LETTER_CC3   300                  A          300
15      1500          LETTER_CCC5  1400                 A          300
16      1600          LETTER_CCC6  1500                 C          300
17      1700          LETTER_BBB8  900                  B          200
18      1800          LETTER_B     0                               1800
19      1900          LETTER_B2    1800                 B          1800               
20      2000          LETTER_BB5   1900                 B          1800              
21      2100          LETTER_BBB8  1900                 B          1800
因此,基于上述内容,我想采用表定义:

Table Name: TECH_VALUES:
    ID,
    GROUP_ID,
    LINK_ID
    PARENT_GROUP_ID,
    TECH_TYPE
并创建一个新视图

View Name: TECH_VALUES_VW:
        ID,
        GROUP_ID,
        LINK_ID
        PARENT_GROUP_ID,
        TECH_TYPE,
        GROUP_ID_PARENT
基于上述TECH_值表中的样本数据

我希望创建一个新的查询来构建这个新的视图,该视图将只对每行为0的父组ID使用组ID

更新 为了让事情更清楚,我想要的是,如果我只取出TECH_VALUES表中PARENT_GROUP_ID为0的记录,即

ID      GROUP_ID      LINK_ID      PARENT_GROUP_ID     
------- ------------- ------------ --------------------
1       100           LETTER_A     0                   
2       200           LETTER_B     0                   
3       300           LETTER_C     0                   
18      1800          LETTER_B     0                  

仅使用这4条记录的组ID值,将此组ID分配给每个父链接ID的所有子记录,作为TECH\u values\u VW中的一个新列,并分配给原始链接ID(其中父链接ID为0),如上面的示例数据集所示。

如果我正确理解了您的问题,那么这可能就是你想要的:

CREATE OR REPLACE VIEW tech_values_vw
AS
SELECT TV.*,
    CASE WHEN LEVEL = 1 THEN group_id ELSE connect_by_root(group_id) END AS group_id_parent
FROM tech_values TV
START WITH parent_group_id = 0
CONNECT BY PRIOR group_id = parent_group_id
;

这还不清楚。当父组id为0时,我理解你想要什么,但当它是其他内容时,我不理解。Dan,请查看我对原始线程的更新-希望它更清晰。可能是重复的