2016-04-13 35 views
0

我想在while循環中使用表中的特定值作爲條件。如何使用表中的值在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有額外狀態欄,我想插入到TABLE_2「X」到狀態欄,其中來自當條件不achived但當類型列循環遇到值爲「BB」插入「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循環? @stubs – Merix

+0

我不太確定你的目標是什麼。 您可以修改案例陳述來處理更復雜的案例 當Type ='bb'時,則'X' 當case ='aa'且數量<= 50時,則'Z' else'Y'end – stubs

+0

不完全......當查詢遇到例如Type ='bb',然後'X',但當Type ='aa',然後'Z'且設置狀態爲6個月時,應在未來12個月內設置。我認爲在修改條款中使用case語句是不可能的。 @stubs – Merix