- ベストアンサー
他のテーブルの抽出条件で更新したい。
・売上ヘッダ 伝票NO,売上金額合計 ・売上明細 伝票NO,明細NO,商品番号,売上金額 上記のようなテーブル構成の2つのテーブルがあります。 売上ヘッダの主キーは、伝票NOで売上明細の主キーは、伝票NOと明細NOです。 ここで、商品番号1の、売上金額に500円の差額があるため、、修正をしたいと考え、売上ヘッダと売上明細にある売上額を変更したいのですが、売上ヘッダの売上金額合計を更新する方法がわかりません。 ご教授いただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
指定したい商品番号が"A1"だとすると、 UPDATE 売上ヘッダ SET 売上金額合計 = (SELECT SUM(売上金額) FROM 売上明細 WHERE 売上ヘッダ.伝票NO = 売上明細.伝票NO) WHERE 伝票NO = ANY (SELECT 伝票NO FROM 売上明細 WHERE 商品番号 = 'A1' GROUP BY 伝票NO); Commit; のようになります。 データ件数が多くて、全件対象にすると時間が掛かるのですかね。 因みに、指定したい商品番号が数件ある場合は、 UPDATE 売上ヘッダ SET 売上金額合計 = (SELECT SUM(売上金額) FROM 売上明細 WHERE 売上ヘッダ.伝票NO = 売上明細.伝票NO) WHERE 伝票NO = ANY (SELECT 伝票NO FROM 売上明細 WHERE 商品番号 IN ('A1','A2',...) GROUP BY 伝票NO); Commit; のようになります。
その他の回答 (1)
- nandarou-1011
- ベストアンサー率50% (65/128)
UPDATE 売上ヘッダ SET 売上金額合計 = (SELECT Sum(売上金額) FROM 売上明細 WHERE 売上ヘッダ.伝票NO = 売上明細.伝票NO) WHERE .... 「商品番号1の…」のくだりですが、売上ヘッダには商品に関わらず全ての明細を集計するのではないでしょうか。商品番号1が関係する伝票のみヘッダを再集計したいという意味だったでしょうか。もしそうならばWHERE条件が少し複雑になります。特に問題がなければ全レコード再集計するのはどうでしょうか。 最後のWHERE句を省略した場合、全てのレコードに関して再集計がなされます。 特定の伝票のみ再集計したい場合には伝票NOの絞込み条件を追加してください。