CASE

时间:2016-05-03 14:56:04

标签: oracle

使用Oracle 11G时如何在if elsif内使用case

我想根据另一列type_pre结束gr.gt_id值为3或4的结果:

我尝试运行并且错误消息缺少关键字。

有没有更好的方法来完成这项任务?

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,

2 个答案:

答案 0 :(得分:3)

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,

答案 1 :(得分:1)

我看到没有人解释你的错误,所以让我告诉你你在哪里错了:

首先,不需要嵌套的IF / Case,每次都可以使用@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部分的原因。