1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| With MaTable as
(
select 1 as id, 'Bob' as nom, 'Ingénieur' as libelleType, 10 as id_Hierarchie from dual union all
select 2 , 'Luke' , 'Ingénieur' , 8 from dual union all
select 3 , 'Franck' , 'Ingénieur' , 10 from dual union all
select 4 , 'Julie' , 'Ingénieur' , 12 from dual union all
select 5 , 'Sylvain' , 'Ingénieur' , 11 from dual union all
select 6 , 'Rachid' , 'Ingénieur' , 13 from dual union all
select 7 , 'Sophie' , 'Ingénieur' , 13 from dual union all
select 8 , 'Suzanne' , 'IngéSenior' , 9 from dual union all
select 9 , 'Fred' , 'ChefEquipe' , 10 from dual union all
select 10 , 'Michel' , 'CP' , 15 from dual union all
select 11 , 'Lucie' , 'ChefEquipe' , 12 from dual union all
select 12 , 'Simon' , 'CP' , 16 from dual union all
select 13 , 'Benoit' , 'CP' , 15 from dual union all
select 14 , 'Mathieu' , 'DirecteurProjet' , 15 from dual union all
select 15 , 'Francois' , 'Manager' , 17 from dual union all
select 16 , 'Jérome' , 'Manager' , 17 from dual union all
select 17 , 'Xavier' , 'Directeur' , null from dual
)
SELECT mt.nom,
substr( sys_connect_by_path( mt.nom, '/' ),
instr(sys_connect_by_path( mt.nom, '/' ), '/', 1, 2) + 1,
instr(sys_connect_by_path( mt.nom, '/' ), '/', 1, 3) - instr(sys_connect_by_path( mt.nom, '/' ), '/', 1, 2) - 1) as cp,
connect_by_root mt.nom as Manager
FROM MaTable mt
WHERE mt.libelleType = 'Ingénieur'
START WITH mt.libelleType = 'Manager'
CONNECT BY PRIOR mt.id = mt.id_Hierarchie
ORDER BY mt.id asc;
NOM CP MANAGER
-------- ------ --------
Bob Michel Francois
Luke Michel Francois
Franck Michel Francois
Julie Simon Jérome
Sylvain Simon Jérome
Rachid Benoit Francois
Sophie Benoit Francois |
Partager