单行不同列中的Oracle树结构层次结构数据显示

Sha*_*dav 9 sql oracle hierarchical-data

我在oracle中有一个名为Employee_Hierarchy的分层表,其列名为entity_code,parent_entity_code,entity_name和entity_role,没有循环.在名为Client的其他表中具有较低的子节点与使用entity_code的分层表的最低子节点连接.我必须在单行层次结构中显示数据,其中列名将由角色追加.

示例示例:

树形结构:

在此输入图像描述

分层表:

在此输入图像描述

降低大多数孩子的表:

在此输入图像描述

预期结果:

在此输入图像描述

有没有办法通过oracle查询获得预期的结果?并且预期结果取决于输入,这意味着它不总是从根元素开始,它可以从任何节点开始,例如team-lead(Shail)到最下面的子节点.

(注意:如果缺少上层,则当前节点的parent_code将是其上层的parent_code,并且缺少的层次元素在预期结果中将为空.)

提前致谢.

Dav*_*itz 4

select      h.Manager_entity_code  
           ,h.Manager_entity_name  
           ,h.Team_Lead_entity_code
           ,h.Team_Lead_entity_name
           ,h.Developer_entity_code
           ,h.Developer_entity_name
           ,c.client_name

from       (select      trim (both ',' from sys_connect_by_path (case when entity_role = 'Manager'   then entity_code end,','))  as Manager_entity_code
                       ,trim (both ',' from sys_connect_by_path (case when entity_role = 'Manager'   then entity_name end,','))  as Manager_entity_name
                       ,trim (both ',' from sys_connect_by_path (case when entity_role = 'Team-Lead' then entity_code end,','))  as Team_Lead_entity_code
                       ,trim (both ',' from sys_connect_by_path (case when entity_role = 'Team-Lead' then entity_name end,','))  as Team_Lead_entity_name
                       ,trim (both ',' from sys_connect_by_path (case when entity_role = 'Developer' then entity_code end,','))  as Developer_entity_code
                       ,trim (both ',' from sys_connect_by_path (case when entity_role = 'Developer' then entity_name end,','))  as Developer_entity_name

            from        hierarchical_table

            where       connect_by_isleaf = 1

            connect by  parent_entity_code = prior entity_code

            start with  entity_code = 100  
            ) h

            join client_table c

            on   c.entity_code  =
                 h.Developer_entity_code 

order by    h.Manager_entity_code  
           ,h.Team_Lead_entity_code
           ,h.Developer_entity_code
;
Run Code Online (Sandbox Code Playgroud)
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| MANAGER_ENTITY_CODE | MANAGER_ENTITY_NAME | TEAM_LEAD_ENTITY_CODE | TEAM_LEAD_ENTITY_NAME | DEVELOPER_ENTITY_CODE | DEVELOPER_ENTITY_NAME | CLIENT_NAME |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
|                 100 | Mack                |                   200 | Shail                 |                   500 | Neha                  | Tata        |
|                 100 | Mack                |                   300 | Jack                  |                   600 | Rocky                 | Rel         |
|                 100 | Mack                |                   300 | Jack                  |                   600 | Rocky                 | Voda        |
|                 100 | Mack                |                   300 | Jack                  |                   600 | Rocky                 | Airtel      |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+  
Run Code Online (Sandbox Code Playgroud)

为了start with entity_code = 300

+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| MANAGER_ENTITY_CODE | MANAGER_ENTITY_NAME | TEAM_LEAD_ENTITY_CODE | TEAM_LEAD_ENTITY_NAME | DEVELOPER_ENTITY_CODE | DEVELOPER_ENTITY_NAME | CLIENT_NAME |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| (null)              | (null)              |                   300 | Jack                  |                   600 | Rocky                 | Airtel      |
| (null)              | (null)              |                   300 | Jack                  |                   600 | Rocky                 | Voda        |
| (null)              | (null)              |                   300 | Jack                  |                   600 | Rocky                 | Rel         |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
Run Code Online (Sandbox Code Playgroud)