我正在使用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)
...
但它一直给我一个关于错过右括号的错误消息。当我评论这一点虽然运行正常。谁有人知道我做错了什么?
答案 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