SQL Server从2个表中选择项的总和

时间:2018-09-11 12:26:27

标签: sql-server select

我有2张桌子; 入站出站。它们都具有相同的结构。

  • TransactionId(int)
  • 日期(日期时间)
  • StoreItemId(int)[FK],
  • 数量(真实)

我尝试了这个选择语句和结果,如下图所示:

SELECT [StoreItemId], SUM([Quantity]) AS 'inbound' FROM [Inbound] GROUP BY [StoreItemId];
SELECT [StoreItemId], SUM([Quantity]) AS 'outbound' FROM [Outbound] GROUP BY [StoreItemId];

query and result

我尝试查询:

SELECT
    (SELECT SUM([Quantity]) AS 'inbound' FROM [Inbound] WHERE [Inbound].[StoreItemId] = 1) - 
    (SELECT SUM([Quantity]) AS 'Outbound' FROM [Outbound] WHERE [Outbound].[StoreItemId] = 1)

结果为105(115-10; StoreItemId的入库数量= 1-StoreItemId的入库数量= 1)

我尝试将上述两个查询组合成这样的查询:

SELECT [StoreItemId] AS 'xyz'
       (SELECT SUM([Quantity]) FROM [Inbound] WHERE [Inbound].[StoreItemId] = [xyz]) - 
       (SELECT SUM([Quantity]) FROM [Outbound] WHERE [Outbound].[StoreItemId] = [xyz])
FROM [StoreItem]

但这是错误的

结果应为:

StoreItemId | Balance
----------------------
1           |   105
2           |   126
3           |   78
4           |   144
5           |   100
6           |   179

1 个答案:

答案 0 :(得分:0)

您可以将LEFT JOINGROUP BY中的SUMQUANTITY一起使用。 您可以参考下面的查询。

select StoreItemId  , (sum(ISNULL(inb.Quantity,0)) - sum(ISNULL(ob.Qunatity,0))) as Balance
from Inbound inb 
LEFT JOIN Outbound ob on ob.StoreItemId = si.StoreItemId
GROUP BY StoreItemId