如何使用UPDATE多次引用同一列--SQL Server Mgmt Studio 2012



我有一个数据库,其中包括特定项目的食谱。我想创建一个更新声明,根据配方中成分的成本更新所有项目成本。我认为我正在处理的问题是,配料和所用物品的价值"成本"都在同一张表中。我已经设法写了一份声明,只更新了一种商品的成本,但我似乎无法使这对所有有配方的商品都有效。附件是一个项目的功能声明和我试图为所有项目编写的声明。

这是一个返回正确值的语句,但仅适用于一个特定的项目编号。

UPDATE inventory
SET inventory.cost = (SELECT SUM(inventory_ingredients.quantity * inventory.cost)
FROM inventory_ingredients, inventory
WHERE inventory.itemnum = inventory_ingredients.ingredient
AND inventory_ingredients.itemnum = 'BeesKnees1200'
GROUP BY inventory_ingredients.itemnum)
WHERE inventory.itemnum = 'BeesKnees1200'

这是我试图编写的语句,它将用SUM 更新所有Inventory.Cost

UPDATE inventory 
SET inventory.cost = (SELECT SUM(inventory_ingredients.quantity * inventory.cost)
FROM inventory_ingredients, inventory
WHERE inventory.itemnum = inventory_ingredients.ingredient
GROUP BY inventory_ingredients.itemnum)
WHERE inventory.itemnum = Inventory_ingredients.itemnum

在这种情况下,我在inventory_ingredients.itemnum 上得到一个"无法绑定">

我认为这里的问题是我两次引用同一个专栏,但我不知道如何更正。任何想法都将不胜感激。

所附图像分别显示了Inventory和Inventory_Ingredients表的相关列。

如果您将查询更改为怎么办

;WITH CTE AS
(
SELECT SUM(ISNULL(TRY_CAST(II.quantity AS INT), 1) * I.cost) * 1.0000 S,
II.itemnum
FROM inventory_ingredients II JOIN inventory I ON I.itemnum = II.ingredient
GROUP BY II.itemnum
)
UPDATE inventory 
SET inventory.cost = CTE.S
FROM inventory JOIN CTE ON inventory.itemnum = CTE.itemnum;

试试这段代码,让我知道它是否适合你:

UPDATE inventory 
SET inventory.cost = (SELECT SUM(inventory_ingredients.quantity*inventory.cost)
FROM inventory_ingredients II, inventory I
WHERE I.itemnum=II.ingredient and i.itemnum = inventory.itemnum 
GROUP BY II.itemnum)

最新更新