Detta kommer att få hela rapporten
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örsta frågan får den rullande summan genom att hacka strukturen för avdelningsnamnet för oens utan belopp, den andra får bladen.
Den första frågan kan inte visa bladen, eftersom de kommer att grupperas. Jag har' Om du inte hittade någon kolumnkombination för att få samma ordning, verkar bladen vara oordnade.
SQLFiddle demo
Jag har försökt skriva en rekursiv CTE
, men det är inte möjligt att ha aggregerad funktion, såsom SUM
i den.