重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

下記の2つの表があり、
表Aから伝票番号毎に集計したTAXで、
同じ伝票番号をもつ表BのTAXを、一括更新しようと考えています。
表Bについては、伝票番号の中で最小の明細番号の行のみ
更新しなければなりません。

SQL-SERVERでは、下記のSQLでどうやら大丈夫そうなのですが、
Oracleでは、更新どころかエラーが発生してしまい、
途方に暮れています。
どなたか、ご教授頂けないでしょうか?
よろしくお願い致します。

update B
set 税額 = AA.税額合計
from B
inner join
(select 伝票番号, min(明細番号) as 最小明細番号
  from B group by 伝票番号) as BB
on BB.伝票番号 = B.伝票番号 and BB.最小明細番号 = B.明細番号
inner join
(select 伝票番号, sum(税額) as 税額合計
from A group by 伝票番号) as AA
on AA.伝票番号 = B.伝票番号

(表A)
・伝票番号
・明細番号
・TAX

(表B)
・伝票番号
・明細番号
・金額
・TAX

A 回答 (2件)

A,B間の明細番号が一致しないのであれば、次のSQLでいけると思いますよ。



update B
set TAX=(select sum(TAX) from A where A.伝票番号=B.伝票番号)
where (伝票番号,明細番号) in (select 伝票番号,min(明細番号) from B)
;

変更点が少ないのでお間違いなく。
    • good
    • 0
この回答へのお礼

うまく更新できました。
ありがとうございます!

お礼日時:2006/11/01 23:58

説明の通りやれば良いのであれば・・



update B
set TAX=(select sum(TAX) from A where A.伝票番号=B.伝票番号)
where (伝票番号,明細番号) in (select 伝票番号,min(明細番号) from A)
;

な感じ。

この回答への補足

ご回答ありがとうございます。
せっかく、ご教授頂きました内容ですが、
select 伝票番号,min(明細番号) from A)では、
表Aの一番小さい明細番号と同一の明細番号をもつ、
表Bを更新する内容だと思います。

この表AとBとは、同一の伝票番号でリンクしていますが、
明細番号は同一ではありません。
1つの伝票番号にN件の明細があり、
その種別(商品金額、税額)により、各々別表に格納されています。
ですので、この条件では、期待通りの更新はされないのでは?
と思いますが、如何でしょうか?

説明不足で申し訳ありません。

補足日時:2006/10/26 23:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す