SQL Server:SUM 值,并从两个不同的表中找到差异

  • 本文关键字:两个 SUM Server SQL sql sql-server
  • 更新时间 :
  • 英文 :


我有以下两个表,我想找出"一月"月份的表 1 和表 2 之间的差异。差额应为表1中1月份所有值的总和减去表2中1月份所有值的总和。

答案应该是 300 (800 - 500(,但我的查询一直给我值"600"。

我的查询是:

SELECT 
a.month,
(SUM(a.cost2)) - (SUM(b.cost2)) AS difference
FROM 
Table1 a
LEFT JOIN 
Table2 b ON a.Month = b.Month
WHERE 
a.month = 'January'
GROUP BY 
a.month

表1

Month    Cost2
--------------
January  500
February 400
March    300
April    600
January  300
March    200
March    400
April    200

表2

Month    Cost2
--------------
January  200
February 250
March    195
April    700
January  300
February 200
March    400
April    200

一种方法是先聚合,然后再聚合join

select a.month, (a_cost2 - b_cost2) as difference
from (select month, sum(a.cost2) as a_cost2
from Table1 a
where a.month = 'January'
group by month
) a left join
(select b.month, sum(b.cost2) as b_cost2
from Table2 b
where b.month = 'January'
group by month
) b
on a.Month = b.Month;

问题是您要对与 A 中的"一月"匹配的每一行对值求和一次。这会导致两个值加倍,并为您提供双倍的差异。

若要解决此问题,必须单独计算 SUMmed 值。这是一种方法:

select 'January'
(SELECT sum(cost2) from Table1 where [month]='January') - 
(SELECT sum(cost2) from Table2 where month='January') as difference

最新更新