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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Statement ignored というエラー
Oracle
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
PL/SQLでのSQL文法
その他(データベース)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
6
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
7
CASE文のエラーについて
Oracle
-
8
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
9
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
10
PL/SQL PLS-00103エラーについて
Oracle
-
11
CloseとDisposeの違い
Visual Basic(VBA)
-
12
カーソル0件の時にエラーを発生させる
Oracle
-
13
Oracle 8i コンマ(,)を含むデータをinsertしたい
その他(データベース)
-
14
SQL文のwhere条件文で使う <> の意味はなんですか
その他(データベース)
-
15
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
16
PL/SQLで@ファイル名が反応しません
Oracle
-
17
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
18
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
19
SQLserverのIF文について
SQL Server
-
20
GROUP BYを使ったSELECT文の総件数を求める方法
SQL Server
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
Accessで在庫管理を
-
IFで条件を分岐させてのINSERT...
-
複数のテーブルから同じ条件で...
-
ビューで引数を使いたい
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESS2007 フォーム 「バリア...
-
2つの項目が重複するレコード...
-
SELECT文でのデッドロックに対...
-
数百万件レコードのdelete
-
非連結サブフォームのレコード...
-
Accessにインポートしたら並び...
-
[ BETWEEN ] vs [ >= AND <= ]
-
sqlserverで集計結果をUPDATEし...
-
Access 1レコードずつcsvで出力...
-
データの二重表示の原因
-
Accessで重複したデータを一件...
-
Accessの重複クエリで最小以外...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
ビューで引数を使いたい
-
IFで条件を分岐させてのINSERT...
-
Accessで在庫管理を
-
SQL 件数取得を速くしたい
-
2つのテーブルを結合して合計(...
-
二つの表の項目を比較して値を...
-
空のテーブルの判別
-
複数のテーブルから同じ条件で...
-
SQLの書き方
-
DB2 業種毎に連番をつけたいの...
-
select into句のトランザクショ...
-
大学でSQLの授業があるのですが...
-
Access関数について クエリで空...
-
リレーションシップ 全データを...
-
Insert Into Select での重複に...
-
Sql文のUpdateと副問い合わせで...
-
別のテーブルの値を抽出条件と...
-
SQL 重複 条件を付けて抽出したい
-
SQLで○○の値以外を持っているレ...
おすすめ情報