SQLServer:求和值并从两个不同的表中查找差异
我有以下两个表,我想找出“一月”月份表1和表2之间的差异。差值应为表1中1月份所有值的总和减去表2中1月份所有值的总和 答案应该是300(800-500),但我的查询一直给我值“600” 我的问题是:SQLServer:求和值并从两个不同的表中查找差异,sql,sql-server,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.m
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
一种方法是先聚合,然后加入:
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中与“一月”匹配的每一行,您将对值求和一次。这将导致两个值加倍,并使差值加倍 要解决此问题,必须分别计算求和值。以下是一种方法:
select 'January'
(SELECT sum(cost2) from Table1 where [month]='January') -
(SELECT sum(cost2) from Table2 where month='January') as difference
显然,在现实世界中,您可能需要一个类似“
DECLARE@month varchar(12)
”的变量,然后将月份分配给该变量,并用该变量替换每个月份的显式名称。您好-感谢您对值加倍的解释,这是有意义的,但我不确定如何写出完整的查询。我尝试了下面的解决方案,似乎奏效了。谢谢实际上,这是完整的查询。它应该根据过滤器输出您需要的内容。谢谢!这实际上是我试图做的(子查询),但我对它的了解几乎不存在。。。再次感谢:)学习调试自己的代码。删除聚合和GROUPBY子句,只需按月对连接的行进行排序。您将看到生成的行,这将帮助您理解计算不正确的原因。