こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

selectであるテーブルからある値Aをとってきます。
値Aが1の時は別テーブルの金額1に登録、2の時は金額2に登録、3の時は金額3に登録
という処理を行いたいです。
同一レコードに対して複数の金額がある事があります。

テーブル1(取得テーブル)
------------------
キー 値A 金額
1   1  500
1   3  300
2   3  200
------------------

テーブル2(登録テーブル)
------------------
キー 金額1 金額2 金額3
1   500  0  300
2    0  0  200
------------------

いま、
insert into テーブル2 SELECT 項目 from テーブル1
というように1つのSQLで、登録、削除をしようとしていますが
可能でしょうか?。方法がよく分かりません。

投稿日時 - 2010-10-05 18:25:29

QNo.6229761

困ってます

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

テーブル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 キー);

ではどうでしょう?

投稿日時 - 2010-10-06 09:18:37

お礼

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

投稿日時 - 2010-10-06 13:35:18

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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.キー)

投稿日時 - 2010-10-07 01:04:16

お礼

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

投稿日時 - 2010-11-07 15:54:58

ANo.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.キー)

投稿日時 - 2010-10-05 19:41:39

お礼

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

投稿日時 - 2010-10-06 13:34:40

あなたにオススメの質問