使用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,
答案 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部分的原因。