• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:selectの内容によって、登録するカラムを変えたい)

selectの内容によって、登録するカラムを変えたい

このQ&Aのポイント
  • selectであるテーブルからある値Aをとってきて、値Aに基づいて金額の登録テーブルを更新したいです。
  • テーブル1から値Aを取得し、値Aの値に応じて金額の登録テーブルを更新したいです。
  • selectの内容によって、登録するカラムを変えたい場合、テーブル1から値Aを取得し、値Aの値によって金額の登録テーブルを更新することができます。値Aが1の場合は金額1に、2の場合は金額2に、3の場合は金額3に登録します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

テーブル1のレコードが、キーと値Aで一意である前提ですが insert into テーブル2 select キー,金額1,金額2,金額3 from (select キー, max(case when 値A = 1 then 金額 else 0 end) 金額1, max(case when 値A = 2 then 金額 else 0 end) 金額2, max(case when 値A = 3 then 金額 else 0 end) 金額3 from テーブル1 group by キー); ではどうでしょう?

evaag777
質問者

お礼

ありがとうございます。 試してみます。

その他の回答 (2)

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

[テーブル1]は[キー]と[値A]でユニークになると仮定すると、下記の様なSQLでもINSERTできるかと。 なお、ORACLE では試していません。 INSERT INTO テーブル2 (キー, 金額1, 金額2, 金額3) SELECT COALESCE(t1.キー, t2.キー, t3.キー), COALESCE(t1.金額, 0), COALESCE(t2.金額, 0), COALESCE(t3.金額, 0) FROM (SELECT キー, 金額 FROM テーブル1 WHERE 値A = 1) t1 FULL OUTER JOIN (SELECT キー, 金額 FROM テーブル1 WHERE 値A = 2) t2 ON (t1.キー = t2.キー) FULL OUTER JOIN (SELECT キー, 金額 FROM テーブル1 WHERE 値A = 3) t3 ON (t2.キー = t3.キー OR t1.キー = t3.キー)

evaag777
質問者

お礼

ご回答、ありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

手元に環境がないのでちゃんとしたSQL文が提示できませんので。 まず、テーブル1のキーをdistinctしてテーブル2にキーと金額1~3を0でinsert insert into テーブル2 select distinct キー,0,0,0 from テーブル1 次にテーブル1の内容でUPDATEする。 update テーブル2 M set 金額1 = ( select 金額 from テーブル1 S where 値A = 1 AND 金額 > 0 and S.キー = M.キー) update テーブル2 M set 金額2 = ( select 金額 from テーブル1 S where 値A = 2 AND 金額 > 0 and S.キー = M.キー) update テーブル2 M set 金額3 = ( select 金額 from テーブル1 S where 値A = 3 AND 金額 > 0 and S.キー = M.キー)

evaag777
質問者

お礼

ありがとうございます。 ちょっと試してみます。

関連するQ&A