2014-02-05 25 views
0

表:認購給予貼息基於訂閱一年

C_ID SUB_YEAR SUB_AMOUNT DISCOUNT PAID_AMOUNT 
---------------------------------------------------- 
1  1   1250   0  0 
2  2   2520   0  0 
3  8   1459   0  0 
4  6   7456   0  0 
5  1   2584   0  0 
6  3   2578   0  0 
7  4   5478   0  0 
8  5   5000   0  0 

查詢我需要的是,

  • 如果sub_year> 2,那麼他/她獲得10%的折扣
  • 和sub_year> 2或< = 3然後他/她得到20%的折扣
  • 和sub_year> 3然後得到25%的折扣。

運行查詢後,discount和paid_amount列應該由值填充。

我的查詢是:

BEGIN 
    FOR REC IN(SELECT SUB_YEAR FROM SUBSCRIPTION) 
    LOOP                     
     IF(REC.SUB_YEAR>1 AND REC.SUB_YEAR<=2) THEN 
      UPDATE SUBSCRIPTION 
      SET DISCOUNT = 10,P_AMOUNT= SUB_AMOUNT-SUB_AMOUNT*.1; 
     ELSIF(REC.SUB_YEAR>2 AND REC.SUB_YEAR<=3) THEN 
      UPDATE SUBSCRIPTION 
      SET DISCOUNT = 20,P_AMOUNT= SUB_AMOUNT-SUB_AMOUNT*.2; 
     ELSIF(REC.SUB_YEAR>3) THEN 
      UPDATE SUBSCRIPTION 
      SET DISCOUNT = 25,P_AMOUNT= SUB_AMOUNT-SUB_AMOUNT*.25; 
     ELSE 
      UPDATE SUBSCRIPTION 
      SET DISCOUNT = 0,P_AMOUNT= SUB_AMOUNT; 
     END IF; 
    END LOOP; 

    IF SQL%NOTFOUND THEN 
     Dbms_output.put_line('No Employee Selected'); 
    ElsIF SQl%FOUND THEN 
     Dbms_output.put_line('Employee Selected'); 

    END IF; 
END; 

的問題是對所有行,該列discount填充了25%和paid_amount用25%的折扣sub_amount的。

+0

什麼SUB_YEAR列DATA_TYPE在認購表 – vishad

+0

c_id號,sub_year整數,sub_amount整數,折扣整數,p_amount整數。 sub_year是總計數年。 – user3274067

回答

2

你已經錯過了你的查詢WHERE條款,

BEGIN 
    FOR REC IN(SELECT SUB_YEAR FROM SUBSCRIPTION) 
    LOOP                     
      IF(REC.SUB_YEAR>1 AND REC.SUB_YEAR<=2) THEN 
       UPDATE SUBSCRIPTION 
       SET DISCOUNT = 10,p_amount= SUB_AMOUNT-SUB_AMOUNT*.1 
       WHERE sub_year >1 and sub_year <= 2 
      ELSIF(REC.SUB_YEAR>2 AND REC.SUB_YEAR<=3) THEN 
       UPDATE SUBSCRIPTION 
       SET DISCOUNT = 20,p_amount= SUB_AMOUNT-SUB_AMOUNT*.2 
       WHERE SUB_YEAR>2 AND SUB_YEAR<=3; 
      ELSIF(REC.SUB_YEAR>3) THEN 
       UPDATE SUBSCRIPTION 
       SET DISCOUNT = 25,p_amount= SUB_AMOUNT-SUB_AMOUNT*.25 
       WHERE SUB_YEAR > 3 
      ELSE 
       UPDATE SUBSCRIPTION 
       SET DISCOUNT = 0,p_amount = SUB_AMOUNT 
       WHERE <condition>; 
      END IF; 
    END LOOP; 
END; 

或者你可以用一個簡單的UPDATE查詢做到了這一點,

UPDATE subscription 
set discount = CASE WHEN sub_year >1 and sub_year <= 2 THEN 10 
        WHEN sub_year >2 and sub_year <= 3 THEN 20 
        WHEN sub_year >3 THEN 25 
       ELSE 0 END, 
    p_amount = CASE WHEN sub_year >1 and sub_year <= 2 THEN SUB_AMOUNT-SUB_AMOUNT*.1 
        WHEN sub_year >2 and sub_year <= 3 THEN SUB_AMOUNT-SUB_AMOUNT*.2 
        WHEN sub_year >3 THEN SUB_AMOUNT-SUB_AMOUNT*.25 
       ELSE SUB_AMOUNT END; 
+0

感謝'Dba'的工作正常..和你的第二個查詢是真棒.... – user3274067