2016-04-13 8 views
0

whileループの条件としてtableから特定の値を使いたいと思います。テーブルからの値を使ってwhileループをナビゲートする方法は?

私は、ステータス列を追加する必要があり、以下の表

Type | Amount 
-------------- 
aa   50   
aa   50   
aa   50   
aa   50   
aa   50   
bb   null  
aa   100   
aa   100   
aa   100 
aa   100 
.. 
aa   80   
aa   100   
aa   90 
aa   100 
aa   80   
aa   100   
aa   100 
aa   100 

を持っています。

declare 
cursor c1 
is 
SELECT 
    Type         
, Amount                   
FROM Table; 

begin 

while c1.Type = 'bb' LOOP 

INSERT INTO TABLE_2 
(
Type, Amount, Status 
) 
VALUES 
(
Table.Type, Table.Amount, Status); 

END LOOP; 
END; 

Table_2は、さらにステータス欄があり、私はしばらくの間から条件がachivedされていないステータス]列にTable_2「X」に挿入したいと思いますが、Type列のループに遭遇する値のB-B「」が「Y」を挿入するときステータスは10行のみ、残りは 'Z'値を挿入する必要があります。

ループの結果:

Type | Amount | Status 
------------------------ 
aa   50  X 
aa   50  X 
aa   50  X 
aa   50  X 
aa   50  X 
bb   null Z (1) 
aa   100  Z (2) 
aa   100  Z (3) 
aa   100  Z (4) 
aa   100  Z (5) 
..    
aa   80  Z (8) 
aa   100  Z (9) 
aa   90  Z (10) 
aa   100  Y 
aa   80  Y 
aa   100  Y 
aa   100  Y 
aa   100  Y 
+0

出力のYとZがあなたの説明と一致していないようです。しかし、元のデータは注文するものがないようですので、どのように条件が当てはまるかを伝えたいと思いますか? –

答えて

0

プールで述べたように、あなたのサンプルデータ/結果は、あなたの説明と一致しません。

いずれの場合でも、カーソルまたはループは必要ありません。以下のクエリでは、状態の条件に応じていくつかの修正を加えてトリックを行う必要があります。

INSERT INTO TABLE_2 
SELECT 
    Type         
, Amount 
, case Type when 'bb' then 'X' else 'Z' end                  
FROM Table 
+0

私はループを使用する必要があります。なぜなら、私はデータベースの切り抜きしか書いていないので、テーブル内にもっと複雑なケースがあるので、それらを識別するために行ごとに移動する必要があります。 質問は、whileループ内をナビゲートするために特定のフィールドからの値を使用する方法ですか? @スタブ – Merix

+0

あなたは何を目指しているのかよく分かりません。 より複雑なケースを処理するためにcase文を修正することができます。 Type = 'bb'、 'X'の場合 Type = 'aa'、量<= 50、次に 'Z' else 'Y' end – stubs

+0

ケースが遭遇したとき。 Type = 'bb'、次に 'X'を入力しますが、Type = 'aa'、次に 'Z'を入力して6ヶ月間ステータスを設定すると、今後12か月間設定されます。私は、変更条項のcase文を使用することはできないと思います。 @スタブ – Merix

関連する問題