Така ще получите пълния отчет
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
Първата заявка получава подвижната сума чрез хакване на структурата на името на отдела за oens без сумите, втората получава листовете.
Първата заявка не може да покаже листовете, тъй като те ще бъдат групирани. t намери комбинация от колони, за да получи същия ред, листата изглежда не са подредени.
SQLFiddle демонстрация
Опитах се да напиша рекурсивен CTE
, но не е възможно да има агрегатна функция, като например SUM
в него.