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

问题描述 投票:2回答:2

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

答案应该是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
sql sql-server
2个回答
3
投票

一种方法是先聚合,然后再聚合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;

0
投票

问题是,对于A中与'January'相匹配的每一行,对这些值求和一次。这导致两个值都加倍,并且差值加倍。

要变通解决此问题,您必须分别计算SUMmed值。这是一种方法:

select 'January'
    (SELECT sum(cost2) from Table1 where [month]='January') - 
    (SELECT sum(cost2) from Table2 where month='January') as difference
© www.soinside.com 2019 - 2024. All rights reserved.