Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je résumer les données dans une structure arborescente en SQL des enfants au parent?

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.