
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で、登録、削除をしようとしていますが
可能でしょうか?。方法がよく分かりません。
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 キー);
ではどうでしょう?
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.キー)
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.キー)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お世話になります。
-
Accessで日付が変わると番号が...
-
ADO VBA 実行時エラー3021
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
ACCESSの集計クエリで3件ある...
-
ACCESSで大量の更新を行うと「...
-
ADOでエクセルからアクセス...
-
PHP+MySQL
-
Excelで、改行がある場合の条件...
-
oracleの分割delete
-
キーが同じを複数行を1行にま...
-
Accessで別テーブルの値をフォ...
-
Access終了時の最適化が失敗?
-
ACCESSのクエリで同じSQL文だが...
-
エクセルのピボットテーブルの...
-
データセットのレコード更新が...
-
SQL GROUPで件数の一番多いレコ...
-
ワードの差込印刷で教えて下さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessに2つのテーブルを結合...
-
ORACLEで2つのテーブルを同時に...
-
CASE文の集計について
-
2つのテーブルの合算値に関して
-
orace 変更表エラーを回避する...
-
SQLを考えてます。
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
ADO VBA 実行時エラー3021
-
決定性有限オートマトン
-
Accessで別テーブルの値をフォ...
-
select句副問い合わせ 値の個...
-
実績累計の求め方と意味を教え...
-
select insertで複数テーブルか...
-
差し込み印刷のレコード数について
-
Access終了時の最適化が失敗?
-
レコードが存在しなかった場合
-
最新の日付とその金額をクエリ...
-
Excelでセルの書式設定を使用し...
おすすめ情報