Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 16030

Some advanced analytics on a hierarchical SQL query

$
0
0

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.


Viewing all articles
Browse latest Browse all 16030

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>