あなたの数量があなたの望む結果を生み出していると確信していますか? サブクエリで 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 テーブルには、合計が 150 になる 2 つのレコードがあります。SoldItemsCalc テーブルには、合計が 25 になる 2 つのレコードがあります。クエリを使用すると、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;