Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête hiérarchique Oracle SQL :Aplatir la hiérarchie et effectuer l'agrégation

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