2017-07-14 221 views
0

我有两个表,其中包含各部门的原始数据和每个部门有多行的收入。我需要每个字段的总和,它的父部门是映射到另一个表中的数据。我有一个较长的版本,适用于个别部门的总结:
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;
以下是我想要实现的,提前致谢。SQL:Sum和groupby,groupby在另一个表中的条件

表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

+0

如果没有家长与部门关联,你会如何分组部门? –

+0

如果没有父母,那么我需要的数据总结方式与我在初始查询中的方式相同,只需通过其自己的部门 –

+0

希望答案能为您工作。 –

回答

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-访问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) 

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

+0

我使用了第二个例子,它完美地工作,非常感谢你的帮助!我也想感谢你让我更多地了解新西兰的功能!有用的信息 –

+0

您的欢迎:)很高兴帮助你! –

0

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

SELECT a.ID FROM ParentDept AS一个 GROUP BY a.ID(选择(从收益耳其中dep.DepID = ear.EarningID)系如DEP SELECT SUM(ear.Earnings)作为totalEarning);