Esto obtendrá el informe 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
La primera consulta obtiene la suma móvil pirateando la estructura del nombre del Departamento para los oen sin las cantidades, la segunda obtiene las hojas.
La primera consulta no puede mostrar las hojas, ya que se agruparán. No encontré ninguna combinación de columnas para obtener el mismo orden, las hojas parecen estar desordenadas.
SQLFiddle demostración
Intenté escribir un CTE
recursivo , pero no es posible tener una función agregada, como SUM
en ella.