如何通过SQL查询获得所需的结果集

时间:2013-01-17 11:59:14

标签: sql

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

3 个答案:

答案 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

创建表格并在帖子中使用值填充它们总是一个好主意......