3

テーブル products の qty フィールドを次のクエリで更新したいと考えています。このクエリは、Qty フィールドに目的の数値を返しています。

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 が一致する値を更新するにはどうすればよいですか

クエリを変更してもかまいません...数量値を更新するだけで済みます

ありがとうございました

4

2 に答える 2

3

私はこのようにします:

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
于 2013-02-20T14:40:55.687 に答える
1

あなたの数量があなたの望む結果を生み出していると確信していますか? サブクエリで 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;
于 2013-02-20T14:56:59.253 に答える