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.