我有一个包含库存物品的表,其中相同的物品可以存储在多个地方(即总数量= 3,1存储在橱柜中,2在冰箱中,0在食品室中)。其中每个都有一个" 20"。
的条目类型还有一些行的输入类型为" 10"控制总数。所以,在我的程序中,我看到"可用"作为条目类型" 10",并且可以通过查看条目类型" 20"来查看每个地点的数量。
在运行一些更新之后,我注意到它花了我的" 10"即使在" 20"中有项目,类型也为零行(在某一组项目上,我有一个列表包含在" IN"语句中以仅更改那些行)
我希望用某种CASE声明(我认为)更新该表以强制使用" 10"条目等于" 20"条目。
表格如下:
ITEM_ID ENTRYTYPE QTY LOCATION_ID
------------------------------------------------
A01 10 0 ALL-AVAILABLE <--THIS ROW SHOULD SHOW QTY=3
A01 20 1 CABINET
A01 20 2 FRIDGE
A01 20 0 PANTRY
A02 10 0 ALL-AVAILABLE <--THIS ROW SHOULD SHOW QTY=6
A02 20 2 CABINET
A02 20 2 FRIDGE
A02 20 2 PANTRY
我认为代码基本上是这样的:
UPDATE Inventory
SET qty = SUM(t2.qty)
FROM Inventory t2
WHERE (ENTRYTYPE = 10 AND qty = 0)
AND ITEM_ID IN (list already generated to be pasted later);
当然,无论出于何种原因,我都无法做到这一点。所有帮助表示赞赏!
TIA
答案 0 :(得分:2)
您可以使用相关更新。
UPDATE t2
SET qty = (select SUM(qty) from Inventory where item_id=t2.item_id and ENTRYTYPE = 20)
FROM Inventory t2
where ENTRYTYPE=10 AND qty=0
要限制更新的item_id,请使用where
条件。
答案 1 :(得分:2)
假设ENTRYTYPE = 10
始终是您希望更新总数量的记录:
UPDATE Inventory
SET qty = (SELECT SUM(qty) FROM Inventory WHERE ENTRYTYPE = 20)
WHERE ENTRYTYPE = 10 AND qty = 0;
答案 2 :(得分:0)
我会使用可更新的CTE执行此操作:
with toupdate as (
select i.*, sum(qty) over (partition by item_id) as sumqty
from inventory i
)
update toupdate
set qty = sumqty
where entrytype = 20;