你确定你的数量为p产生你想要的结果?您在子查询中执行SUM,然后在外部查询中执行另一个SUM。这可能会把你的数字搞乱。下面是@戈登很好的回答略有变化 - 这是使用数量,我认为您在更新产品表想:
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
有2记录在Product_Invoices表中,其中SUM为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;
谢谢......这个工作,因为我想...... – Barlet 2013-02-20 15:14:30