2013-02-20 4 views
2

Я хочу обновить поле qty в своих продуктах таблицы следующим запросом. Этот запрос возвращает мне нужные числа в поле Qty.Обновление SQL с результатами другой таблицы

SELECT e.Prod_name, e.Prod_number, 
    (SUM(e.Qty) - SUM(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 
order by Prod_name 

Как я могу использовать этот запрос и обновить значения где product_number соответствует

Я не возражаю, если вы изменить запрос ... Просто необходимо обновить кол-во значениях

благодарственного вы

ответ

2

я сделать это таким образом:

with toupdate as (
    SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - SUM(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 
    ) 
update t 
    set qty = toupdate.qty 
    from toupdate 
    where t.prod_nubmer = toupdate.prod_number 
+0

Спасибо ... это работало, как я хотел ... – Barlet

1

вы уверены, что ваш кол-во р создавая желаемые результаты? Вы делаете 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; 
+0

я получаю те же результаты с вашим запросом тоже ... я проверил мои результаты, и они, кажется, в порядке ... Спасибо – Barlet

+0

@Barlet - хорошо, но будьте осторожны - см. эту скрипку, что я имею в виду: http://www.sqlfiddle.com/#!3/0cc74/1 -- Удачи! – sgeddes

+0

@Barlet - в основном, если в вашей таблице Products_Invoices с одним и тем же номером prod_number имеется более одной записи, вы будете суммированы. Таблица SoldItemsCalc будет неправильной (множитель количества записей в другой таблице). Не беспокойтесь, хотя если ваш запрос возвращает то, что вы хотите, просто хотел, чтобы вы знали :) – sgeddes

Смежные вопросы