你确定你的数量产生了你想要的结果吗?在子查询中进行了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;
这是一个示例Fiddle: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;