下記の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,B間の明細番号が一致しないのであれば、次のSQLでいけると思いますよ。
update B
set TAX=(select sum(TAX) from A where A.伝票番号=B.伝票番号)
where (伝票番号,明細番号) in (select 伝票番号,min(明細番号) from B)
;
変更点が少ないのでお間違いなく。
お礼
うまく更新できました。 ありがとうございます!