Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL йерархична заявка:изравняване на йерархията и извършване на агрегиране

Предложението на Podiluska е добро. Ако имате Oracle 11g R2, общите таблични изрази са правилният начин. Рекурсивният характер на новия синтаксис ще ви позволи да се откажете от sys_connect_by_path комбиниран с instr , което сериозно ще навреди на ефективността ви.

Опитайте това:

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;

Ето sqlfiddle:http://sqlfiddle.com/#!4/9840f/6



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C# NHibernate &Oracle управляван клиент

  2. Добра справка за Oracle PL/SQL

  3. SQL разработчик:генерира DB документ за друг потребител

  4. Как да проверите пространството за таблици в Oracle SQL Developer?

  5. hibernate oracle последователността произвежда голяма празнина