我正在一个表上运行查询,该表返回要在其上使用SUM的多行,因此我只返回了1行。我可以做到这一点,并使用以下代码获得正确的结果:
SELECT E10Production.Erp.LaborDtl.EmployeeNum,
E10Production.Erp.LaborDtl.JobNum,
E10Production.Erp.LaborDtl.OprSeq,
SUM(E10Production.Erp.LaborDtl.LaborHrs * E10Production.Erp.LaborDtl.LaborRate) AS TotalLabor,
SUM(E10Production.Erp.LaborDtl.BurdenHrs * E10Production.Erp.LaborDtl.BurdenRate) AS BurdenCost
FROM E10Production.Erp.LaborDtl
LEFT OUTER JOIN E10Production.Erp.JobOper ON E10Production.Erp.JobOper.Company = E10Production.Erp.LaborDtl.Company
AND E10Production.Erp.JobOper.OprSeq = E10Production.Erp.LaborDtl.OprSeq
AND E10Production.Erp.JobOper.JobNum = E10Production.Erp.LaborDtl.JobNum
LEFT OUTER JOIN E10Production.Erp.JobMtl ON E10Production.Erp.JobMtl.RelatedOperation = E10Production.Erp.LaborDtl.OprSeq
AND E10Production.Erp.LaborDtl.Company = E10Production.Erp.JobMtl.Company
AND E10Production.Erp.LaborDtl.JobNum = E10Production.Erp.JobMtl.JobNum
WHERE E10Production.Erp.JobOper.JobNum = '623165'
AND E10Production.Erp.JobOper.OprSeq = '20'
AND E10Production.Erp.JobMtl.MtlSeq = '20'
GROUP BY E10Production.Erp.LaborDtl.EmployeeNum,
E10Production.Erp.LaborDtl.JobNum,
E10Production.Erp.LaborDtl.OprSeq
原始数据如下:
EmployeeNum JobNum OprSeq TotalLabor BurdenCost
007349 623165 20 41.34 29.64
007349 623165 20 76.85 55.10
将所有内容分组并加总后,它看起来像这样:
EmployeeNum JobNum OprSeq TotalLabor BurdenCost
007349 623165 20 118.19 84.74
EmployeeNum,JobNum和OprSeq相同,TotalLabor和BurdenCost求和,降到1行,这正是我想要的。
现在我要在结果中再添加一列
E10Production.Erp.JobMtl.TotalCost AS MaterialCost。
所以我将列添加到查询的SELECT和GROUP BY中,现在看起来像这样:
SELECT E10Production.Erp.LaborDtl.EmployeeNum,
E10Production.Erp.LaborDtl.JobNum,
E10Production.Erp.LaborDtl.OprSeq,
Sum(E10Production.Erp.LaborDtl.LaborHrs * E10Production.Erp.LaborDtl.LaborRate) AS TotalLabor,
Sum(E10Production.Erp.LaborDtl.BurdenHrs * E10Production.Erp.LaborDtl.BurdenRate) AS BurdenCost,
E10Production.Erp.JobMtl.TotalCost AS MaterialCost
FROM E10Production.Erp.LaborDtl
LEFT OUTER JOIN E10Production.Erp.JobOper ON E10Production.Erp.JobOper.Company = E10Production.Erp.LaborDtl.Company
AND E10Production.Erp.JobOper.OprSeq = E10Production.Erp.LaborDtl.OprSeq
AND E10Production.Erp.JobOper.JobNum = E10Production.Erp.LaborDtl.JobNum
LEFT OUTER JOIN E10Production.Erp.JobMtl ON E10Production.Erp.JobMtl.RelatedOperation = E10Production.Erp.LaborDtl.OprSeq
AND E10Production.Erp.LaborDtl.Company = E10Production.Erp.JobMtl.Company
AND E10Production.Erp.LaborDtl.JobNum = E10Production.Erp.JobMtl.JobNum
WHERE E10Production.Erp.JobOper.JobNum = '623165'
AND E10Production.Erp.JobOper.OprSeq = '20'
AND E10Production.Erp.JobMtl.MtlSeq = '20'
GROUP BY E10Production.Erp.LaborDtl.EmployeeNum,
E10Production.Erp.LaborDtl.JobNum,
E10Production.Erp.LaborDtl.OprSeq,
E10Production.Erp.JobMtl.TotalCost,
E10Production.Erp.LaborDtl.LaborHrs * E10Production.Erp.LaborDtl.LaborRate,
E10Production.Erp.LaborDtl.BurdenHrs * E10Production.Erp.LaborDtl.BurdenRate,
MaterialCost
就像EmployeeNum,JobNum和OprSeq一样,TotalCost也一样,所以我希望看到这样的东西:
EmployeeNum JobNum OprSeq TotalLabor BurdenCost MaterialCost
007349 623165 20 118.19 84.74 101.26
但是,我得到的却是这个结果:
EmployeeNum JobNum OprSeq TotalLabor BurdenCost MaterialCost
007349 623165 20 41.34 29.64 101.26
007349 623165 20 76.85 55.10 101.26
对于我的一生,我不知道为什么会这样。我不知道它在某个地方是否是不正确的JOIN(我会承认,JOIN仍然让我陷入循环),或者这也许仅仅是SQL的局限性而不能满足我的要求。
有人能指出我正确的方向吗?我可以查询一些关键字吗?