我試圖更新表中的一列。目標是獲取當前值並從另一個表中減去該值。下面是我在看:更新聲明與從其他表中的子查詢
update LS
set LS.Quantity = (LS.Quantity -
(
select top 1 LSM.Quantity
from tblLocationStockMovement LSM
join tblLocation L on L.ID=LSM.LocationID
join tblStock S on S.ID=LSM.StockID
join tblLocationStock LS on LS.StockID=LSM.StockID
where
LSM.StockID=LS.StockID
and MoveTypeID=16
and dateadd(DAY, DATEDIFF(day,0,DateCreated),0)='2016-08-30 00:00:00.00')
)
from tblLocationStock LS
join tblLocation L on L.ID=LS.LocationID
join tblStock S on S.ID=LS.StockID
join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
的tblLocationStockMovement
表中有我需要從tblLocationStock
表減去值。他們都可以使用StockID
加入tblStock
。我希望它會減去兩個表中引用的相同股票的價值。現在它只是爲每個項目做相同的編號。
我可能不需要最後的join
s,我只是用它來添加一個where
來測試一個特定的項目,然後再對每個項目進行測試。你看到我要去哪裏嗎?
編輯:感謝大衛修復我的格式。我沒有用過這個網站,所以我不熟悉發佈內容的正確方法。
EDIT2:
所有你們三個有類似的想法,而奇怪的是,它有時作品。
這裏就是我現在運行:
update LS
set LS.Quantity=(ISNULL(LS.Quantity,0)-ISNULL(LSM.Quantity,0))
from tblLocationStock LS
join tblLocation L on L.ID=LS.LocationID
join tblStock S on S.ID=LS.StockID
join tblLocationStockMovement LSM on LSM.StockID=S.ID
where L.LongDescription='Cafe'
and MoveTypeID=2
and PLU = 715
問題是結果的變化,我不知道爲什麼。
select LSM.Quantity
from tblLocationStockMovement LSM
join tblLocation L on L.ID=LSM.LocationID
join tblStock S on S.ID=LSM.StockID
where L.LongDescription='Cafe'
and PLU=715
and MoveTypeID=2
總是導致120
select LS.Quantity
from tblLocationStock LS
join tblLocation L on L.ID=LS.LocationID
join tblStock S on S.ID=LS.StockID
where L.LongDescription='Cafe'
and PLU = 715
總是導致53.因此,您所期待的更新語句的結果總是導致-67。有時候,但有時我會得到5,-43或29.答案有什麼不同?