sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kan jeg opsummere data i trælignende struktur i SQL fra børn til forældre?

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.



  1. Golang MySQL fejl - packets.go:33:uventet EOF

  2. Android Realm-håndtering af primær nøgle i relationelt objekt

  3. onCreate() af RoomDatabase.Callback() blev ikke kaldt efter et vellykket kald til .build()

  4. Ydeevne overraskelser og antagelser:STRING_SPLIT()