0

我正在开发库存管理系统。我必须像这样的桌子。

tblPurchase桌子

PurchaseId  |  ItemCode  |   ItemName    | Quantity |
-----------------------------------------------------
 1          |  IMT0003   | Dell Laptop   | 30       |
-----------------------------------------------------
 2          |  IMT0004   | Samsung Phone | 2        |
-----------------------------------------------------
 3          |  IMT0003   | Dell Laptop   | 5        |
-----------------------------------------------------

tblProductStock桌子

    ItemCode  |   ItemName    | Quantity |
    --------------------------------------
    IMT0003   | Dell Laptop   | 35       |
    --------------------------------------
    IMT0004   | Samsung Phone | 2        |
    --------------------------------------

现在我想做这样的事情。现在tblPurchase表戴尔笔记本电脑数量是 35。tblProductStock也一样。现在我退回 5 台戴尔笔记本电脑。现在我想更新我的tblPurchasePurchaseId1 是 25 或PurchaseId3 是 0。因为我返回了 5 项。我不在乎哪个purchaseid。如果我从 30 中扣除,它应该是 25。或者如果我扣除表格purchaseId3 。它应该是0。

而且我的tblProductStock表也应该根据tblPurchase表数量进行更改。这意味着现在我的tblProductStock戴尔笔记本电脑表必须是 30。为了实现这个目标,我们可以使用这样的更新查询。

ALTER TRIGGER [dbo].[update_productstock_table_when_updating_purchasequantity] 
ON [dbo].[tblPurchase]
AFTER UPDATE
AS
BEGIN  
    UPDATE ps
    SET Quantity = ps.Quantity
    FROM tblProductStock ps JOIN
         (SELECT i.ItemCode, SUM(quantity) as quantity
          FROM tblPurchase i
          GROUP BY i.itemCode
         ) i
         ON ps.ItemCode = i.ItemCode;
END 

但我的问题不是这个。这是预期的工作。想象一下我的tblPurchase台式戴尔笔记本电脑数量是 30。我卖一台笔记本电脑。不是我的tblProductStock戴尔笔记本电脑是 29 台。不是 30 台。现在我从表中退回 5 台戴尔笔记本电脑tblPurchase。现在我的购买数量应该是 25。我的tblProductStock桌子必须是 24。因为我卖了一件。为了实现这个目标,我可以使用以下更新语句。

UPDATE ps
    SET Quantity = i.quantity - ps.Quantity
    FROM tblProductStock ps JOIN
         (SELECT i.ItemCode, SUM(quantity) as quantity
          FROM tblPurchase i
          GROUP BY i.itemCode
         ) i
         ON ps.ItemCode = i.ItemCode;

但是我怎样才能将这两个更新查询与触发器一起使用。如果我使用两者都是相同的触发器,它会得到错误的值。因为两个表中的数量相同。我想更新tblProductStock表。但我的tblProductStock餐桌数量是 29 并且购买量是 30 。在我返回 5 之后,现在我的tblPurchase25tblProductStock应该是 24。这就是我问这个问题的原因。有人可以重写此代码,请发给我。我尝试解决这个问题超过 100 次。仍然没有解决这个问题。

4

1 回答 1

0

您可以使用类似的方法来更新您的 Stock 表。

CREATE TABLE #TempPurchase
(   ID INT IDENTITY (1, 1) ,
    ItemCode VARCHAR (10) ,
    Quantity INT );

CREATE TABLE #TempSold
(   ID INT IDENTITY (1, 1) ,
    ItemCode VARCHAR (10) ,
    Quantity INT );

CREATE TABLE #TempStock
(   ID INT IDENTITY (1, 1) ,
    ItemCode VARCHAR (10) ,
    Quantity INT );

INSERT INTO #TempPurchase ( ItemCode ,
                            Quantity )
VALUES ( 'IMT0003', 25 ) ,
       ( 'IMT0004', 2 ) ,
       ( 'IMT0003', 5 );

INSERT #TempSold ( ItemCode ,
                   Quantity )
VALUES ( 'IMT0003', 2 );

INSERT INTO #TempStock ( ItemCode ,
                         Quantity )
VALUES ( 'IMT0003', 30 ) ,
       ( 'IMT0004', 2 );


CREATE TABLE #FinalData
(   ID INT IDENTITY (1, 1) ,
    ItemCode VARCHAR (10) ,
    Quantity INT );

INSERT #FinalData ( ItemCode ,
                    Quantity )
       SELECT   ts.ItemCode ,
                ISNULL (( SUM (tp.Quantity) - ts2.Quantity ), ts.Quantity) AS quantity
       FROM     #TempStock AS ts
                LEFT JOIN #TempPurchase AS tp ON tp.ItemCode = ts.ItemCode
                LEFT JOIN #TempSold AS ts2 ON ts2.ItemCode = ts.ItemCode
       GROUP BY ts.ItemCode ,
                ts2.Quantity ,
                ts.Quantity;

UPDATE ts
SET    ts.Quantity = fd.Quantity
FROM   #FinalData AS fd
       INNER JOIN #TempStock AS ts ON ts.ItemCode = fd.ItemCode;

DROP TABLE #TempStock
DROP TABLE #TempPurchase
DROP TABLE #TempSold
DROP TABLE #FinalData
于 2021-01-22T07:47:41.663 回答