如何使用SUM函数和组联接SQL中的表?

时间:2019-06-06 09:49:15

标签: sql group-by sql-server-2014

我正在创建一个报告,以显示按项目划分的成本和收入。我需要根据项目对应收发票总额和应收发票总额进行分组。

同一项目可能有很多应付账款发票和应收账款发票,其中可能包含相同的项目。如果有5个具有相同项目的应付账款发票,例如A,B,CI,则也需要按金额进行项目明智的总和(按行总和)

所有项目名称和代码(PrjCode-主键)均基于单独的OPRJ表 其他表结构如下 应付发票-OPCH(主要详细信息)与PCH1链接(项目详细信息)   在主键上-DocEntry   PCH1线路与PCH1.Project = OPRJ.PrjCode

上的OPRJ链接

应收发票-OINV(主要详细信息)与INV1链接(项目详细信息)   在主键上-DocEntry   INV1行与INV1.Project = OPRJ.PrjCode上的OPRJ链接

我尝试了此查询,但无法获得总和

select a.PrjCode,a.PrjName,b.ItemCode,sum(b.LineTotal),Sum(c.DocTotal),sum(e.DocTotal)
from OPRJ a 
Left Join PCH1 b on b.Project = a.PrjCode
Left Join OPCH c on c.DocEntry = b.DocEntry
Left Join INV1 d on d.Project = a.PrjCode and b.Project = d.Project
Left Join OINV e on e.DocEntry = d.DocEntry
Group by 
a.PrjCode,a.PrjName,c.DocTotal,e.DocTotal,b.ItemCode,b.LineTotal

我期望的输出如下

enter image description here

不加和的sql输出

enter image description here

1 个答案:

答案 0 :(得分:0)

您应该通过以下方式从组中删除要汇总的值:

select a.PrjCode,a.PrjName,b.ItemCode,sum(b.LineTotal),Sum(c.DocTotal),sum(e.DocTotal)
from OPRJ a 
Left Join PCH1 b on b.Project = a.PrjCode
Left Join OPCH c on c.DocEntry = b.DocEntry
Left Join INV1 d on d.Project = a.PrjCode and b.Project = d.Project
Left Join OINV e on e.DocEntry = d.DocEntry
Group by 
a.PrjCode,a.PrjName,b.ItemCode