Spowoduje to uzyskanie pełnego raportu
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
Pierwsze zapytanie pobiera sumę kroczącą poprzez zhakowanie struktury nazwy działu dla jednostek bez kwot, drugie pobiera liście.
Pierwsze zapytanie nie może pokazać liści, ponieważ zostaną one zgrupowane. t znaleziono dowolną kombinację kolumn, aby uzyskać tę samą kolejność, liście wydają się nieuporządkowane.
SQLFiddle demo
Próbowałem napisać rekurencyjne CTE
, ale nie można mieć funkcji agregującej, takiej jak SUM
w nim.