使用CASE功能

时间:2014-08-13 19:18:59

标签: sql oracle

我正在使用Oracle,并且正在尝试为以下场景构建一些sql:

在EMPLOYEES表上,如果员工的ADDRESS3不等于'',请使用ADDRESS2填充此字段,使用ADDRESS1填充此字段。

...

, ADDRESS_LINE2 = NVL(( 
    SELECT (CASE t2.ADDRESS3 != ' ' THEN t2.ADDRESS2 ELSE t2.ADDRESS1 END)
    FROM EMPLOYEES t2
    WHERE t2.EMPLID = PS_Z_EXS_EMP_TBL_T.EMPLID
), t2.ADDRESS1)

...

但它一直给我一个关于错过右括号的错误消息。当我评论这一点虽然运行正常。谁有人知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

CASE有两个变体 - 都需要WHEN子句。

一个变体可以在每个WHEN子句中具有完整且复杂的布尔表达式:

CASE
   WHEN t2.ADDRESS3 != ' ' THEN t2.ADDRESS2
   ELSE t2.ADDRESS1
END

在另一个变体中,每个WHEN子句都包含要为CASE表达式测试的值:

CASE t2.ADDRESS3
   WHEN ' ' THEN t2.ADDRESS1
   ELSE t2.ADDRESS2
END

最后一个不能做!=因此“反转”逻辑; - )

答案 1 :(得分:0)

在案例表达式的末尾需要END关键字:

CASE t2.ADDRESS3 != ' ' THEN t2.ADDRESS2 ELSE t2.ADDRESS1 END