Oracle
 sql >> база данни >  >> RDS >> Oracle

Как мога да обобщя данни в дървовидна структура в SQL от деца към родител?

Така ще получите пълния отчет

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

Първата заявка получава подвижната сума чрез хакване на структурата на името на отдела за oens без сумите, втората получава листовете.
Първата заявка не може да покаже листовете, тъй като те ще бъдат групирани. t намери комбинация от колони, за да получи същия ред, листата изглежда не са подредени.

SQLFiddle демонстрация

Опитах се да напиша рекурсивен CTE , но не е възможно да има агрегатна функция, като например SUM в него.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на няколко реда в Oracle

  2. Как да използвате Pandas Write_Frame за експортиране на резултати в Oracle Database в cx_Oracle

  3. Sql:разлика между две дати

  4. Простото извикване на getColumnName(0) извежда невалиден индекс на колона:getValidColumnIndex

  5. Извикване на недефинирана функция oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6