sql >> Databáze >  >> RDS >> Oracle

Jak mohu shrnout data ve stromové struktuře v SQL od dětí po rodiče?

Tím získáte úplný přehled

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

První dotaz získá pohyblivý součet hacknutím struktury názvu oddělení pro oens bez částek, druhý dostane listy.
První dotaz nemůže zobrazit listy, protože budou seskupeny. Když jsem nenašel žádnou kombinaci sloupců pro získání stejného pořadí, listy se zdají být neuspořádané.

SQLFiddle demo

Pokusil jsem se napsat rekurzivní CTE , ale není možné mít agregační funkci, jako je SUM v něm.



  1. PostgreSQL matematické funkce

  2. Jak získám první datum čtvrtletí v MySQL?

  3. Poskytování rychlejších inovací komunitě MariaDB

  4. Chci předat argument proměnné do externího souboru SQL (PL/SQL s SQL*Plus)