Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn phân cấp trong Oracle SQL:Làm phẳng hệ thống phân cấp và thực hiện tổng hợp

Đề xuất của Podiluska là tốt. Nếu bạn có Oracle 11g R2, các biểu thức bảng thông thường là cách để đi. Bản chất đệ quy của cú pháp mới sẽ cho phép bạn loại bỏ sys_connect_by_path kết hợp với instr , điều này sẽ ảnh hưởng nghiêm trọng đến hiệu suất của bạn.

Hãy thử điều này:

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;

Đây là 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. sử dụng LIKE và IN với truy vấn con trong sql

  2. Chèn mảng byte [] dưới dạng đốm màu trong Cơ sở dữ liệu Oracle nhận ORA-01460:yêu cầu chuyển đổi chưa thực hiện hoặc không hợp lý

  3. IF EXISTS điều kiện không hoạt động với PLSQL

  4. Làm thế nào để tạo chế độ xem bằng cách sử dụng hành động động trong APEX oracle?

  5. 50 Sắc thái của Kỳ thi Chứng chỉ Cơ sở dữ liệu Oracle