I have this little schema. The my_item_lab
table represents items with their denomination in English and French.
drop table my_item_lib;create table my_item_lib( id_item number, lib_fr varchar2(100), lib_en varchar2(100));insert into my_item_lib values (1, '1_fr', '1_en');insert into my_item_lib values (2, '2_fr', '2_en');insert into my_item_lib values (3, '3_fr', '3_en');insert into my_item_lib values (4, '4_fr', '4_en');insert into my_item_lib values (5, '5_fr', '5_en');insert into my_item_lib values (6, '6_fr', '6_en');insert into my_item_lib values (7, '7_fr', '7_en');insert into my_item_lib values (8, '8_fr', '8_en');insert into my_item_lib values (9, '9_fr', '9_en');insert into my_item_lib values (10, '10_fr', '10_en');
The my_item_hierarchy
represents an hierarchy between items.
drop table my_item_hierarchy;create table my_item_hierarchy( id_item number, id_item_sup number, ordre number);insert into my_item_hierarchy values (1, null, 1);insert into my_item_hierarchy values (2, 1, 2);insert into my_item_hierarchy values (3, 2, 3);insert into my_item_hierarchy values (4, 3, 4);insert into my_item_hierarchy values (5, 3, 5);insert into my_item_hierarchy values (6, 4, 6);insert into my_item_hierarchy values (7, 4, 7);insert into my_item_hierarchy values (8, 2, 8);insert into my_item_hierarchy values (9, 1, 9);insert into my_item_hierarchy values (10, 9, 10);
I am writing this query to get, for each item, its parent, grand parent and great grand parent.
select *from( with v00 as ( select a.id_item , lib.lib_fr , lib.lib_en -- -- , a.id_item_sup , lib_sup.lib_fr lib_fr_sup , lib_sup.lib_en lib_en_sup from my_item_hierarchy a , my_item_lib lib , my_item_lib lib_sup where 1 = 1 and a.id_item = lib.id_item and a.id_item_sup = lib_sup.id_item(+) ), h as ( select connect_by_root id_item id_item , id_item_sup , level lvl from v00 where 1 = 1 connect by id_item = prior id_item_sup and level <= 3 ) select id_item , id_item_sup1, id_item_sup2, id_item_sup3 from h pivot (max(id_item_sup) for lvl in (1 as id_item_sup1, 2 as id_item_sup2, 3 as id_item_sup3)) order by 1); ID_ITEM ID_ITEM_SUP1 ID_ITEM_SUP2 ID_ITEM_SUP3---------- ------------ ------------ ------------ 1 2 1 3 2 1 4 3 2 1 5 3 2 1 6 4 3 2 7 4 3 2 8 2 1 9 1 10 9 1
Now, how can I modify the query so I can get this output :
ID_ITEM ID_ITEM_SUP1 ID_ITEM_SUP2 ID_ITEM_SUP3 LIB_EN_SUP1 LIB_EN_SUP2 LIB_EN_SUP3---------- ------------ ------------ ------------ --------------- --------------- --------------- 1 2 1 1_en 3 2 1 2_en 1_en 4 3 2 1 3_en 2_en 1_en 5 3 2 1 3_en 2_en 1_en 6 4 3 2 4_en 3_en 2_en 7 4 3 2 4_en 3_en 2_en 8 2 1 2_en 1_en 9 1 1_en 10 9 1 9_en 1_en
I am using Oracle 11.2.0.3.
Thanks in advance.