你確定你的數量爲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