Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana saya bisa meringkas data dalam struktur seperti pohon di SQL dari anak-anak ke orang tua?

Ini akan mendapatkan laporan lengkap

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

Kueri pertama mendapatkan jumlah bergulir dengan meretas struktur nama Departemen untuk oens tanpa jumlah, yang kedua mendapatkan daun.
Kueri pertama tidak dapat menampilkan daun, karena akan dikelompokkan. Saya belum' t menemukan kombinasi kolom apa pun untuk mendapatkan urutan yang sama, daunnya tampaknya tidak berurutan.

SQLFiddle demo

Saya sudah mencoba menulis CTE rekursif , tetapi tidak mungkin memiliki fungsi agregat, seperti SUM di dalamnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CSV di Pengembang SQL…

  2. Bagaimana cara menginstal paket ROracle di Windows 7?

  3. Oracle UTL_SMTP:Kirim Email dengan Contoh Lampiran Menggunakan Otentikasi Oracle Wallet

  4. Kata sandi Pengguna Tamu di 11i/R12

  5. Masalah saat menginstal Oracle Database Express Edition 11g