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

Làm thế nào để truy xuất tất cả các con đệ quy của hàng cha trong Oracle SQL?

Bạn đang ở gần:

select connect_by_root parent_id base, parent_id, child_id, qty
from md_boms
connect by prior child_id = parent_id
order by base, parent_id, child_id;

          BASE  PARENT_ID   CHILD_ID        QTY
    ---------- ---------- ---------- ----------
            25         25         26          1 
            25         25         27          2 
            25         26         28          1 
            25         26         29          1 
            25         26         30          2 
            25         27         31          1 
            25         27         32          1 
            25         27         33          2 
            26         26         28          1 
            26         26         29          1 
            26         26         30          2 
            27         27         31          1 
            27         27         32          1 
            27         27         33          2 

     14 rows selected 

connect_by_root nhà điều hành cung cấp cho bạn parent_id cơ sở .

SQL Fiddle .

Tôi không chắc bạn đang tính toán qty như thế nào . Tôi đoán bạn muốn tổng số đường dẫn đến đứa trẻ, nhưng điều đó không khớp với những gì bạn đã trình bày. Như một điểm khởi đầu, do đó, vay mượn rất rất nhiều từ câu trả lời này , bạn có thể thử một cái gì đó như:

with hierarchy as (
  select connect_by_root parent_id base, parent_id, child_id, qty,
    sys_connect_by_path(child_id, '/') as path
  from md_boms
  connect by prior child_id = parent_id
)
select h.base, h.parent_id, h.child_id, sum(e.qty)
from hierarchy h
join hierarchy e on h.path like e.path ||'%'
group by h.base, h.parent_id, h.child_id
order by h.base, h.parent_id, h.child_id;

     BASE  PARENT_ID   CHILD_ID SUM(E.QTY)
---------- ---------- ---------- ----------
        25         25         26          1 
        25         25         27          2 
        25         26         28          2 
        25         26         29          2 
        25         26         30          3 
        25         27         31          3 
        25         27         32          3 
        25         27         33          4 
        26         26         28          1 
        26         26         29          1 
        26         26         30          2 
        27         27         31          1 
        27         27         32          1 
        27         27         33          2 

 14 rows selected 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_CHAR (số) Hàm trả về ORA-01722:số không hợp lệ

  2. ORACLE - ORA-01843:không phải là tháng hợp lệ

  3. Ngày thêm và ngày sửa đổi để kiểm tra bảng Oracle

  4. Lỗi SQL:ORA-00907:đấu tranh với dấu ngoặc đơn bên phải

  5. cách đặt lại cột Identity trong Oracle