从具有相同ID的不同表中减去2列

时间:2015-07-15 02:57:52

标签: c# datagridview sql-server-2012

我有2个表TblAddToInventoryTblWithdrawnFromInventory。两者都有ProductIDQuantity。提款时,库存自然应扣除物品数量,但只扣除已撤回的物品。例如:

  

TblAddToInventory

ProductID | Quantity | Amount | Date

1           2          2.00     7/7/2012

2           3          3.00     7/7/2012

3           4          4.00     7/7/2012

2           2          2.00     7/8/2012

3           3          3.00     7/8/2012
  

TblWithdrawnFromInventory

ProductID | Quantity | Amount | Date

2           4          4.00     7/9/2012

3           5          5.00     7/10/2012

有了这个,当我加入这两个表并扣除特定的列时,我应该使用C#和DataGridView来获取这些数据:

ProductID | Quantity | Amount 

1           2          2.00

2           1          1.00

3           2          2.00

我知道如何使用SUMJOIN,但我不知道如何创建一个语法,该语法将从具有相同ID的不同表中减去两列。

我不知道这是否正确,但我想到的是SUM来自TblAddToInventory GROUP BY使用SUM然后TblWithdrawnFromInventory来自{{1}使用GROUP BYSUBTRACT TblAddToInventory使用TblWithdrawnFromInventoryGROUP BY使用jbtOne。但我认为这不是一个好主意。你能帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我知道如何使用SUM和JOIN,但我只是不知道如何创建一个   语法将从不同的表中减去两列   相同的ID。

这是代码如何执行此操作:

 SELECT inventory.ProductId, 
            inventory.Quantity - ISNULL(withdrawal.Quantity,0) AS Quantity, 
            inventory.Amount - ISNULL(withdrawal.Amount,0) AS Amount
        FROM (
            SELECT ProductId, SUM(Quantity) AS Quantity, SUM(Amount) AS Amount
            FROM TblAddToInventory
            GROUP BY ProductId
        ) AS inventory
        LEFT JOIN (
            SELECT ProductId, SUM(Quantity) AS Quantity, SUM(Amount) AS Amount
            FROM TblWithdrawnFromInventory
            GROUP BY ProductId
        ) AS withdrawal ON inventory.ProductId = withdrawal.ProductId