2016-05-03 33 views
1

如何在使用Oracle 11G時在case內使用if elsifOracle IF內部CASE

我想結束type_pre值與3或4基於另一列:gr.gt_id

我嘗試運行並且錯誤消息缺少關鍵字。

有沒有更好的方法來完成這項任務?

CASE 
    WHEN certv.id IS NOT NULL THEN NULL 
    WHEN cert.id IS NOT NULL THEN 
     IF gr.gt_id = 0 THEN type_pre = 3 
     ELSIF gr.gt_id = 1 THEN type_pre = 4 
     END IF 
    WHEN not.id IS NOT NULL THEN NULL 
END as type_pre, 
+0

你是在普通的SQL中,還是在PL/SQL過程/函數/等中執行此操作? – mathguy

+0

這是一個視圖,但變成一個普通的sql也會工作 –

回答

2
CASE 
    WHEN certv.id IS NOT NULL     THEN NULL 
    WHEN cert.id IS NOT NULL and gr.gt_id = 0 THEN 3 
    WHEN cert.id IS NOT NULL and gr.gt_id = 1 THEN 4 
    WHEN not.id IS NOT NULL     THEN NULL 
END as type_pre, 
+0

thank's @mahguy它正在如此簡單地工作在SQL語法的差異。 –

1

我看沒有人解釋你的錯誤,所以讓我來告訴我你在哪裏wen't錯誤:

首先,不需要嵌套的IF的/凱斯的,它可以用做每次都像@mathguy的答案。

IF在PL/SQL中使用,不能在Oracle中直接使用,所以如果你想做到這一點在你的方法,使用嵌套的條件,那麼這應該是你的查詢:

CASE 
     WHEN certv.id IS NOT NULL THEN NULL 
     WHEN cert.id IS NOT NULL THEN 
     CASE WHEN gr.gt_id = 0 THEN = 3 
      WHEN gr.gt_id = 1 THEN = 4 END 
     WHEN not.id IS NOT NULL THEN NULL 
    END as type_pre, 

你除了使用IF之外的第二個問題是使用THEN部分中的陳述。這是一個CASE EXPRESSION,它可以用來放置一個值,而不是一個聲明,這就是爲什麼我刪除了type_pre部分。