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で質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
64bit端末でのOLEDB接続に関して
-
sql(oracle)で質問です。 テ...
-
Oracleで文字列型の時間を引き...
-
データベースのカラムの型がCHA...
-
batファイルでのSQL(oracle)...
-
SQL 2つのテーブルとSUBSTRING...
-
ORA-14452について
-
osqleditについて
-
分散トランザクションについて
-
ノートパソコンのマイク音量が...
-
orace SQL文のエラー(ORA-0092...
-
oracleのimpdpでORA-39166
-
ビットで表せる数値について
-
続.ORACLEのSELECTのソートに...
-
ワークテーブルって何?
-
複数レコードの完全一致
-
テーブルやカラムの物理名のネ...
-
バッチファイルで複数フォルダ...
-
PL/SQLの変数の命名規則
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こういうSELECTは可能でしょうか?
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
select句副問い合わせ 値の個...
-
ADO VBA 実行時エラー3021
-
SELECTの結果で同一行を複数回...
-
カレントレコードが無い事を判...
-
キーが同じを複数行を1行にま...
-
Access終了時の最適化が失敗?
-
Date型にNULLをセットしたい V...
-
レコードが存在しなかった場合
-
実績累計の求め方と意味を教え...
-
Excelでセルの書式設定を使用し...
-
SQL文で素早くNULLを除外する方法
-
MERGE文を単体テーブルに対して...
-
ファイル書込みで一行もしくは...
おすすめ情報