伟大的sql专家! :) 我的老板希望每月/每年/每天的员工工作报告。我想到了大部分我需要的SQL查询,但最后一个超出了我的理解范围。SQL多语言查询与两个sum语句
我有几个表格:人员,服务,计划和ProvidedServices。表格计划包含每个服务上每个人的个人月计划。所以我需要一个查询,它返回每个人在特定服务的特定时间段提供的服务的总价值以及同一服务上同一时期计划工作量的汇总值。现在我有这样的事情:
SELECT SUM(BoRRenderedServices.ServiceCount),
BoREmployee.Name,
BoRServices.Service,
SUM(BoRTargets.Amount)
FROM BoRRenderedServices, BoREmployee, BoRServices, BoRTargets
WHERE (BoRTargets.EmployeeID = BoREmployee.ID)
AND (BoRTargets.ServiceID = BoRServices.ID)
AND (BoRRenderedServices.Date BETWEEN '2014-1-1' AND '2014-9-19')
AND (BoREmployee.DepartmentID = 'cc42cac9-5ac7-4614-9b7b-ef931a9a132b')
AND (BoRRenderedServices.EmployeeID = BoREmployee.ID)
AND (BoRRenderedServices.ServiceID = BoRServices.ID)
AND (BoRRenderedServices.ServiceID = '0fbf68bf-ace8-4ecb-ba07-7049046c0215')
GROUP BY BoREmployee.Name,
BoRServices.Service
但此查询使双总和,它总结了所提供的服务数量的两倍,这同样适用于计划。我的意思是,每次它发现为WHERE条件提供服务时 - 它也总结计划,而不是仅将提供的服务添加到第一个sum语句中。
人1,8月1日3次提供服务1次,8月3日1次,7月4日4次。 Person1八月份的计划是三次,七月份是四次。
所需的输出:
--------------Plan Fact Service1 1----------1 Service2 1----------2 Service3 1----------3
实际输出:
--------------Plan Fact Service1 3----------3 Service2 3----------6 Service3 3----------9
你能后的实际数据和期望的输出?你有什么样的DB,MySQL,SQL-Server,Oracle,什么版本?您还可以在[sqlfiddle](http://sqlfiddle.com/)上发布示例 – Max 2014-09-19 08:05:29
旧学校JOIN已经破旧大约20年了,请使用JOIN关键字。 – HoneyBadger 2014-09-19 08:16:33
在sqlfiddle.com上提供一个示例 – Max 2014-09-26 10:14:32