Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak mogę zsumować dane w strukturze drzewiastej w SQL od dzieci do rodzica?

Spowoduje to uzyskanie pełnego raportu

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

Pierwsze zapytanie pobiera sumę kroczącą poprzez zhakowanie struktury nazwy działu dla jednostek bez kwot, drugie pobiera liście.
Pierwsze zapytanie nie może pokazać liści, ponieważ zostaną one zgrupowane. t znaleziono dowolną kombinację kolumn, aby uzyskać tę samą kolejność, liście wydają się nieuporządkowane.

SQLFiddle demo

Próbowałem napisać rekurencyjne CTE , ale nie można mieć funkcji agregującej, takiej jak SUM w nim.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać procedurę składowaną z SQL Plus?

  2. Czy można odwołać się do dziesiątego i kolejnych ciągów zastępczych w regexp_replace Oracle?

  3. Jak pobrać komentarze z Oracle 11g za pomocą JDBC?

  4. Czy możesz używać Microsoft Entity Framework z Oracle?

  5. Widząc ORA-01858:znaleziono znak nienumeryczny w miejscu, w którym oczekiwano liczby