Dette vil få den fulde rapport
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
Den første forespørgsel får den rullende sum ved at hacke strukturen af afdelingsnavnet for oens uden beløbene, den anden får bladene.
Den første forespørgsel kan ikke vise bladene, da de vil blive grupperet. Jeg har' Hvis du ikke fandt nogen kolonnekombination for at få den samme rækkefølge, ser bladene ud til at være uordnede.
SQLFiddle demo
Jeg har forsøgt at skrive en rekursiv CTE
, men det er ikke muligt at have aggregeret funktion, såsom SUM
i den.