Cela permettra d'obtenir le rapport complet
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
La première requête obtient la somme glissante en piratant la structure du nom du département pour les oens sans les montants, la seconde obtient les feuilles.
La première requête ne peut pas afficher les feuilles, car elles seront regroupées. Aucune combinaison de colonnes n'a été trouvée pour obtenir le même ordre, les feuilles semblent ne pas être ordonnées.
SQLFiddle démo
J'ai essayé d'écrire un CTE
récursif , mais il n'est pas possible d'avoir une fonction d'agrégation, telle que SUM
dedans.