2017-10-11 35 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是多余的*/

相关问题