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

Làm cách nào để tổng hợp dữ liệu theo cấu trúc dạng cây trong SQL từ con đến cha?

Điều này sẽ nhận được báo cáo đầy đủ

SELECT t1.DEPARTMENT_ID
     , t1.PARENT_DEP_ID
     , t1.DEPARTMENT   
     , Sum(t2.Amount) Amount
FROM   TREE_DATA t1
       INNER JOIN TREE_DATA t2 
       ON t1.DEPARTMENT = SUBSTR(t2.DEPARTMENT, 1, LENGTH(t1.DEPARTMENT))
WHERE  t1.Amount = 0
GROUP BY t1.DEPARTMENT_ID, t1.PARENT_DEP_ID, t1.DEPARTMENT

UNION ALL

SELECT DEPARTMENT_ID
     , PARENT_DEP_ID
     , DEPARTMENT   
     , Amount
FROM   TREE_DATA
WHERE  Amount > 0
ORDER BY DEPARTMENT

Truy vấn đầu tiên lấy tổng luân phiên bằng cách hack cấu trúc của tên Bộ cho các oens mà không có số tiền, truy vấn thứ hai lấy các lá.
Truy vấn đầu tiên không thể hiển thị các lá, vì chúng sẽ được nhóm lại. t tìm thấy bất kỳ kết hợp cột nào để có cùng một thứ tự, các lá dường như không có thứ tự.

SQLFiddle bản demo

Tôi đã cố gắng viết một CTE đệ quy , nhưng không thể có hàm tổng hợp, chẳng hạn như SUM trong đó.



  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ách xem những đặc quyền nào được cấp cho giản đồ của người dùng khác

  2. Tìm độ dài của hàng dài nhất trong một cột trong oracle

  3. Trong SQL, việc sử dụng dấu ngoặc đơn với OR có nghĩa là gì?

  4. Xóa nhà cung cấp dữ liệu Oracle cho .NET khỏi Global Assembly Cache

  5. Oracle sẽ khóa toàn bộ bảng trong khi thực hiện một câu lệnh DML hay chỉ một hàng