
SQL Server2005環境です。
ストアドプロシージャを作成しています。
テーブルAを読み込んで、その値を元に、テーブルBに値を
INSERTしていくという処理をしたいと考えています。
1.テーブルA.区分1<>0の時、テーブルB.区分は1
2.テーブルA.区分2<>0の時、テーブルB.区分は2
3.テーブルA.区分1<>0 かつ テーブルA.区分2<>0であれば、
テーブルB.区分が1のレコードと、2のレコード、2つ作る
以上のような処理をしたいと考えています。
ストアドはまったく初心者なのですが、分岐については、
DECLARE TEST CURSOR FOR
SELECT
区分1,
区分2
FROM テーブルA
OPEN TEST
FETCH NEXT FROM TEST
INTO
@KBN1,
@KBN2
--条件分岐
IF KBN1<>0
BEGIN
@INKBN=1
END
IF KBN2<>0
@INKBN=2
END
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO テーブルB(区分)
VALUES(@INKBN)
こんな感じになるのか?と思っているのですが、これではケース3の、
区分1、2ともに0ではない場合の処理ができません。
このような場合、どのように記述すれば目的の処理を達成できるのか
教えていただけないでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
次の2つのSQL文を書けばいいのでは?
ストアドプロシージャで、ループを書くより効率もいいと思います。
ところでこの例では、テーブルBは区分しか持ってませんが、もちろん他のカラムもあるんですよね。
そのときは。SELECT文で必要な値を取得してくださいね。
INSERT INTO テーブルB(区分)
SELECT 1 FROM テーブルA WHERE 区分1 <> 0;
INSERT INTO テーブルB(区分)
SELECT 2 FROM テーブルA WHERE 区分2 <> 0;
回答ありがとうございます。
INSERTを2つ書いておけば良いだけの話だったんですね。
入れる値が違うだけなので、変数のほうが分岐するような
イメージがあったので、思い浮かびませんでした。
大変参考になりました。
No.1
- 回答日時:
DECLARE @KBN1 INT;
DECLARE @KBN2 INT;
DECLARE TEST CURSOR FOR
SELECT
区分1,
区分2
FROM テーブルA;
OPEN TEST;
FETCH NEXT FROM TEST INTO @KBN1,@KBN2;
WHILE @@FETCH_STATUS = 0
BEGIN
--条件分岐
IF @KBN1<>0
INSERT INTO テーブルB(区分) VALUES(1);
IF @KBN2<>0
INSERT INTO テーブルB(区分) VALUES(2);
FETCH NEXT FROM TEST INTO @KBN1,@KBN2;
END;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
このQ&Aを見た人はこんなQ&Aも見ています
-
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
CASE文のエラーについて
Oracle
-
select insertで複数テーブルから値を取得したい
Oracle
-
-
4
GROUP BYを行った後に結合したい。
Oracle
-
5
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
6
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
7
PL/SQLカーソルの2重FORループができません
Oracle
-
8
テーブルの最後(最新)のレコードを抽出したい
MySQL
-
9
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
10
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
11
UPDATE文のWHERE条件に他のテーブルのフィールドも入れたい
SQL Server
-
12
FROM の中で CASE を使えるでしょうか
SQL Server
-
13
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
14
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
15
DBの定義のサイズを大きくし過ぎると問題ある?
その他(データベース)
-
16
visual studio2019でデバッグができません
Visual Basic(VBA)
-
17
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
18
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
19
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
20
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
ビューで引数を使いたい
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESSで複数テーブルを結合し...
-
SQL Server 2005 レプリケーシ...
-
ACCESS2007 フォーム 「バリア...
-
オラクルではできるのにSQLSERV...
-
教えてください
-
Accessのフォームから削除した...
-
sqlserverで集計結果をUPDATEし...
-
ユニオンクエリの結果をテーブ...
-
SI Object Browserのテーブルス...
-
SELECT文でのデッドロックに対...
-
Access2つのテーブルの差額を...
-
データの二重表示の原因
-
accessのエクスポートエラーに...
-
コクヨ タイトルブレーンでイ...
-
アクセス97のクエリーで、年月...
-
列名XXXXが無効です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビューで引数を使いたい
-
IFで条件を分岐させてのINSERT...
-
ACCESS 一番最新の日付の金額...
-
Insert Into Select での重複に...
-
INSERT文でサブクエリ
-
SQLで○○の値以外を持っているレ...
-
select into句のトランザクショ...
-
SQL 件数取得を速くしたい
-
SQLの書き方
-
DB2 業種毎に連番をつけたいの...
-
リレーションシップ 全データを...
-
大学でSQLの授業があるのですが...
-
Sql文のUpdateと副問い合わせで...
-
空のテーブルの判別
-
クエリでこのテーブルのデータ...
-
AccseeのSQL文について教えてく...
-
複数のテーブルから同じ条件で...
-
GROUP BYを使うのでしょうか?S...
-
2つのテーブルを結合して合計(...
-
条件が混在しているSQLで値取得
おすすめ情報