2017-10-11 74 views
-1

我有2個表格。更新主表基於添加或刪除另一個表上的值?

庫存:

ID Name Quantity 
1 Table 100 
2 Desk  200 

和第二表調劑:

ID Name AddDate     AddQT RemoveDate   RemoveQT Agent 
1 Table 6/19/2015 10:03:06 AM  10         alex mortage 
2 Table         6/19/2015 10:03:06 AM 15 linda raven 

如何更新基礎上,轉移表列AddQTRemoveQT股票表中的列Quantity

傳輸表通過用戶輸入(數量值)更新,1條記錄可能有一個添加日期,因此它是一個「添加數量」操作。另一個記錄可以在SQL中註冊,以通過用戶輸入刪除數量。

+0

從'Table2',哪一列? – Wanderer

+0

爲避免數據不一致,請使用觸發器! – jarlh

+0

嗨,我說數量列中的庫存必須根據刪除qt或添加qt更新 – dado

回答

0

的UPDATE語句可以這樣做:

UPDATE Stock SET Quantity = sum(isnull(AddQt, 0) - isnull(RemoveQt, 0)) 
FROM Stock 
    LEFT JOIN Transfers on Transfers.Name = Stock.Name 
GROUP BY Stock.Name, Transfers.Name 

如果你需要的是自動的,你只需要在轉讓觸發器內執行該語句:

CREATE TRIGGER [Transfers_UpdateStock] ON [Transfers] AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
    UPDATE Stock SET Quantity = sum(isnull(AddQt, 0) - isnull(RemoveQt, 0)) 
    FROM Stock 
     LEFT JOIN Transfers on Transfers.Name = Stock.Name 
    WHERE Stock.Name in inserted.Name or Stock.Name in deleted.Name 
    GROUP BY Stock.Name, Transfers.Name 
END 
GO 
+0

是的,但這並沒有被問及如果你多次運行股票水平將是錯誤的 – Drammy

+0

嗨好的更新聲明馬克,所以當用戶註冊一個添加QT或刪除QT自動更新的數量? – dado

+0

要公平,OP沒有提到有關自動更新的任何內容 – Squirrel

0
Update stock 
set quantity = quantity + 
    (Select sum(coalesce(addqt,0))-(sum(coalesce(removeqt,0))*-1) 
     From transfers t 
     Where t.id = stock.id) 
Where Id in (select id from transfers) 

/*在公共交通工具上這樣做,所以無法驗證,但我的頭頂*/

/* coalesces aro und sum是多餘的*/

相關問題