查询在下一个子级别的层次结构中进行求和

时间:2014-11-15 13:53:11

标签: sql oracle sum hierarchical-data

我的oracle db中有两个表:
人物:
IdPerson - PK

IdLeader

收益:
IdEarning - PK
IdPerson
EarningValue

有一个等级制度:每个人都有一个领导者,当然很多人可以拥有同一个领导者。领导者是表中的一员。有些人的领导也可以有他的领导等等。那就是层次结构 我正在尝试进行一个返回两列的查询:
- 人员身份
- 领导者在此行中具有id的领导者的所有收入的总和

重要的是,我只需要这个领导者的直接下属的收入总和。因此,如果任何有领导者的人也是另一组人的领导者,那么我必须只对第一级别的等级进行求和。

现在我有一个查询可以得到一些总和,但总和是错误的计算,我不知道为什么

 SELECT LEVEL , People.IdPerson, SUM (EarningValue)
    FROM People JOIN Earnings
    ON
    Earnings.IdPerson=People.IdPerson
    START WITH IdLeader IS NULL
    CONNECT BY PRIOR People.IdPerson= IdLeader
    GROUP BY LEVEL, People.IdPerson;


这个查询有什么问题?应该如何正确地计算总和?

1 个答案:

答案 0 :(得分:1)

根据您的描述,您不需要分层查询。只是做:

select p.idleader, sum(earningvalue) as earningvalue
from person p join
     earnings e
     on e.idperson = p.idperson
group by p.idleader;