SQL:Sum和groupby,另一个表

时间:2017-07-14 18:50:06

标签: sql ms-access

我有两个表,一个包含各个部门的原始数据和每个部门多行的收入。我需要它的父部门的每个字段的总和,数据映射在另一个表中。我有以下声明的较长版本,适用于个别部门的总结:
SELECT a.Dept, Sum(a.Earnings) as Earnings FROM Source AS a GROUP BY a.Dept;
我一直在努力的是我需要总结每个部门而不是它的部门而不是它的父部门,这个映射信息存储在一个单独的表中。我尝试了不同的连接,并没有完全得到我想要的结果。这是我写的一个(不正确的)查询,它给出了一个父部门列表,但不包括没有父部门的部门,也给出了错误的总数:
SELECT r.ParentDept, sum(a.Earnings) AS Earnings, FROM EarningsTable a inner JOIN ParentTable r ON a.Dept = r.Dept group by r.ParentDept;
以下是我想要实现的目标,提前谢谢。

表1:
Dept Earnings 4 1000 4 16767 8 2456 9 2456 10 3456 3 36543 表2(映射表):
Dept ParentDept 4 1 8 1 9 2 10 2 3 3
表3(结果表):
ParentDept Earnings 1 20233 2 5912 3 36543

2 个答案:

答案 0 :(得分:0)

请检查此查询可能是它的工作。

选择a.ID(选择(选择Sum(ear.Earnings)作为totalEarning从Earning as ear,其中dep.DepID = ear.EarningID)dept as dep)     FROM ParentDept AS a     GROUP BY a.ID;

答案 1 :(得分:0)

这是查询,但适用于我测试过你的场景的SQL Server:

select ISNULL(p.parentdept,c.dept),SUM(c.earning) from child c left join parent 
p on p.dept=c.dept group by ISNULL(p.parentdept,c.dept)

对于MS-Access,NZ()将替换空值(NZ()等同于ISNULL())。

未经测试但应该有效:

select NZ(p.parentdept,c.dept),SUM(c.earning) from child c left join parent 
p on p.dept=c.dept group by NZ(p.parentdept,c.dept)

如果查询不起作用...希望至少你有一个想法来解决问题。 :)