вы уверены, что ваш кол-во р создавая желаемые результаты? Вы делаете SUM в своем подзапросе, а затем выполняете еще один SUM в своем внешнем запросе. Это, вероятно, испортит ваши номера. Вот небольшое изменение @ хороший ответ Гордона - это обновление таблицы продукта с помощью Qty Я думаю, что вы хотите:
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
Есть 2 записи в таблице Product_Invoices, в которой SUM до 150. И 2 записи в таблице SoldItemsCalc, сумма которых равна 25. Используя ваш запрос, общий результат изменяется до 100, когда я думаю, вы хотите 125.
BTW - используя 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