Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como posso resumir dados em estrutura semelhante a árvore em SQL de filhos para pai?


Isso obterá o relatório completo
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

A primeira consulta obtém a soma contínua hackeando a estrutura do nome do Departamento para os oens sem os valores, a segunda obtém as folhas.
A primeira consulta não pode mostrar as folhas, pois elas serão agrupadas. t encontrou qualquer combinação de colunas para obter a mesma ordem, as folhas parecem estar desordenadas.

SQLFiddle demonstração

Eu tentei escrever um CTE recursivo , mas não é possível ter uma função de agregação, como SUM iniciar.