sql >> Databasteknik >  >> RDS >> Oracle

Hur kan jag summera data i trädliknande struktur i SQL från barn till förälder?

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.



  1. SQL-punktnotation

  2. I Postgresql hur man beställer efter datum samtidigt som man behåller anpassat datumformat

  3. Hitta icke-numeriska värden i en kolumn i SQL Server

  4. Hur kan VBA ansluta till MySQL-databas i Excel?