您好我正在根据我们的某个数据块的条件尝试选择。他们可以选择-All-选择,但我无法让它工作或运行得更好。
我现在如何拥有它,但它看起来真的很笨重,我认为有时它并没有拿起一些价值
where SLRRDEF_RDEF_CODE = (select CASE
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'A100'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'A110'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B100'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B110'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B120'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'B130'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'W110'
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' Then 'W590'
ELSE :parm_dd_rdef.RDEF_CODE
END from dual
我想尝试一些有效的东西,但是我得到了错误的括号/关键字错误,我不相信它与它有任何关系。有人能帮忙吗
where (CASE
WHEN :parm_dd_rdef.RDEF_DESC like '-All-' THEN SLRRDEF_RDEF_CODE in ('A100','A110','B100','B110','B120','B130','W110','W590')
WHEN :parm_dd_rdef.RDEF_DESC not like '-All-' THEN SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE
END)
AND
where SLRRDEF_RDEF_CODE in (CASE WHEN :parm_dd_rdef.RDEF_DESC like '-All-'
THEN ('A100','A110','B100','B110','B120','B130','W110','W590')
ELSE :parm_dd_rdef.RDEF_CODE)
答案 0 :(得分:3)
case
的目的是允许您在通常不允许的地方使用布尔逻辑。由于where
子句首先基于布尔逻辑,因此使用case
语句通常会出现失误。
很难确切地说出你想要完成什么,但是插入一点,我认为这可能是你的场景更好的解决方案:
WHERE SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE
OR (:parm_dd_rdef.RDEF_DESC = '-All-'
and SLRRDEF_RDEF_CODE
in ('A100','A110','B100','B110','B120','B130','W110','W590'))
如果您在参数为SLRRDEF_RDEF_CODE
时真的不关心'-All-'
的价值,那么它就更容易了:
where SLRRDEF_RDEF_CODE = :parm_dd_rdef.RDEF_CODE
OR :parm_dd_rdef.RDEF_DESC = '-All-'