Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann ich Daten in einer baumartigen Struktur in SQL von Kindern zu Eltern zusammenfassen?

Dadurch wird der vollständige Bericht abgerufen

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

Die erste Abfrage erhält die fortlaufende Summe durch Hacken der Struktur des Abteilungsnamens für die Oens ohne die Beträge, die zweite erhält die Blätter.
Die erste Abfrage kann die Blätter nicht anzeigen, da sie gruppiert werden. Ich habe' Ich habe keine Spaltenkombination gefunden, um dieselbe Reihenfolge zu erhalten, die Blätter scheinen ungeordnet zu sein.

SQLFiddle Demo

Ich habe versucht, einen rekursiven CTE zu schreiben , aber es ist keine Aggregatfunktion wie SUM möglich darin.