你确定你的数量正在产生你想要的结果吗?您在子查询中执行 SUM,然后在外部查询中执行另一个 SUM。这可能会弄乱你的数字。这是@Gordon 的好答案的一个细微变化——这是使用我认为你想要的数量更新 Product 表:
with toupdate as (
SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - g.Qty) Qty
FROM Products_Invoices e JOIN (
SELECT product_number, SUM(qty) Qty
FROM SoldItemsCalc
GROUP BY product_number
) g ON e.Prod_number = g.product_number
GROUP BY Prod_number, Prod_name, g.Qty
)
update p
set qty = t.qty
from products p join toupdate t on p.prod_number = t.prod_number;
这是带有示例的小提琴:http ://www.sqlfiddle.com/#!3/42c80/1
Product_Invoices 表中有 2 条记录总和为 150。SoldItemsCalc 表中有 2 条记录总和为 25。使用您的查询,当我想您想要 125 时,总体结果变为 100。
顺便说一句——使用上面的 CTE 将适用于 SQL Server 2005 及更高版本。如果您需要支持 SQL Server 2000,请使用此版本:
update p
set qty = t.qty
from products p join (
SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - g.Qty) Qty
FROM Products_Invoices e JOIN (
SELECT product_number, SUM(qty) Qty
FROM SoldItemsCalc
GROUP BY product_number
) g ON e.Prod_number = g.product_number
GROUP BY Prod_number, Prod_name, g.Qty) t on p.prod_number = t.prod_number;