La suggestion de Podiluska est bonne. Si vous avez Oracle 11g R2, les expressions de table communes sont la solution. La nature récursive de la nouvelle syntaxe vous permettra d'abandonner le sys_connect_by_path
combiné avec instr
, ce qui va sérieusement nuire à vos performances.
Essayez ceci :
select
child,
sum(total_quantity) total_quantity
from (
with h (parent, child, isleaf, quantity, total_quantity) as (
select
parent,
child,
isleaf,
quantity,
quantity total_quantity
from
itemhier
where
parent = 'ASSY001'
union all
select
ih.parent,
ih.child,
ih.isleaf,
ih.quantity,
ih.quantity * h.total_quantity total_quantity
from
itemhier ih
join
h on h.child = ih.parent
)
select * from h
where isleaf = 1
)
group by child;
Voici le sqlfiddle :http://sqlfiddle.com/#!4/9840f/6