select * from employee
UNIT_ID PARENT_UNIT TOT_EMP
------- ----------- -------
Oracle IT 10
SAP IT 20
IT PST 30
HRGA FA 5
FA PST 12
如何获得输出:
IT 60
ORACLE 10
SAP 20
HRGA 5
FA 17
答案 0 :(得分:4)
select a.name, sum(a.tot_emp)
from
(
select unit_id as name, sum(tot_emp) as tot_emp
from employee
group by unit_id
UNION
select parent_id as name, sum(tot_emp) as tot_emp
from employee
group by parent_id
) as a
where exists (select null
from employee e
where e.unit_id = a.name)
group by name;
但这不是一个真正的递归查询(这似乎是你需要的),它可以与你的样本一起使用,但可能不适用于实际数据(但我们不知道你的层次结构的深度)。
答案 1 :(得分:0)
我不知道有些遗嘱。可以在UNIT_ID列中使用相同名称的次数吗? 如果没有,这是一个很好的查询:
select e1.UNIT_ID, SUM(TOT_EMP) AS TOT_EMP
from emploee e1
innner join emploee e2
on e1.UNIT_ID = E2.PARENT_UNIT
group by e1.UNIT_ID
如果在UNIT_ID列中可以使用相同的名称,请查看RaphaëlAlthaus的答案。这是个好主意。
答案 2 :(得分:0)
这是Oracle查询:
SELECT unit_id, SUM(total_emp) FROM stack_test
GROUP BY unit_id
/
UNIT_ID SUM(TOTAL_EMP)
-------- --------------
SAP 50
HRGA 15
ORACLE 30
创建表格并在帖子中使用值填充它们总是一个好主意......