select regexp_substr (h.entity,'Manager~([^~]*)~' ,1,1,'',1) as Manager_entity_code
,regexp_substr (h.entity,'Manager~([^~]*)~([^,]*)' ,1,1,'',2) as Manager_entity_name
,regexp_substr (h.entity,'Team-Lead~([^~]*)~' ,1,1,'',1) as Team_Lead_entity_code
,regexp_substr (h.entity,'Team-Lead~([^~]*)~([^,]*)',1,1,'',2) as Team_Lead_entity_name
,regexp_substr (h.entity,'Developer~([^~]*)~' ,1,1,'',1) as Developer_entity_code
,regexp_substr (h.entity,'Developer~([^~]*)~([^,]*)',1,1,'',2) as Developer_entity_name
,c.client_name
from (select sys_connect_by_path (entity_role || '~' || entity_code || '~' || entity_name,',') as entity
,entity_code
from hierarchical_table
where connect_by_isleaf = 1
connect by parent_entity_code = prior entity_code
start with entity_code = 200
) h
join client_table c
on c.entity_code =
h.entity_code
order by Manager_entity_code
,Team_Lead_entity_code
,Developer_entity_code
;
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| 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 |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
Dla start with entity_code = 600
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| MANAGER_ENTITY_CODE | MANAGER_ENTITY_NAME | TEAM_LEAD_ENTITY_CODE | TEAM_LEAD_ENTITY_NAME | DEVELOPER_ENTITY_CODE | DEVELOPER_ENTITY_NAME | CLIENT_NAME |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
| (null) | (null) | (null) | (null) | 600 | Rocky | Airtel |
| (null) | (null) | (null) | (null) | 600 | Rocky | Voda |
| (null) | (null) | (null) | (null) | 600 | Rocky | Rel |
+---------------------+---------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+
ten zakłada stałą liczbę poziomów w hierarchii: Klient
mathguy
Czy używasz MySQL lub Oracle? (Prawdopodobnie różne odpowiedzi.) – jarlh
@jarlh: Używam Oracle. –