Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hierarchische Oracle SQL-Abfrage:Hierarchie abflachen und Aggregation durchführen

Podiluskas Vorschlag ist gut. Wenn Sie Oracle 11g R2 haben, sind allgemeine Tabellenausdrücke der richtige Weg. Die rekursive Natur der neuen Syntax ermöglicht es Ihnen, sys_connect_by_path aufzugeben kombiniert mit instr , was Ihre Leistung ernsthaft beeinträchtigen wird.

Versuchen Sie Folgendes:

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;

Hier ist sqlfiddle:http://sqlfiddle.com/#!4/9840f/6