我是Oracle Realm 的新手,所以这可能是垒球。在处理SSRS报表时,我将一系列状态传递给 View 。不同之处在于,用户还可以从状态列表中选择一个名为“[No Selection]”的选择(这部分不是通过执行,而我坚持以这种方式实现)
如果他们选择“无选择”选项,那么我只想默认返回所有状态,否则,仅返回以逗号分隔的列表中的状态列表。
这确实看起来应该很容易,但是我被卡住了。这是我到目前为止的代码(只是想让示例工作),但是我的目光终于crossed之以鼻。
有人能给我一些指导吗?
开始
:stateCode:='MO,FL,TX';
-:stateCode:='[无选择]';
结束;
/
选择count(*)作为StateCount,选择:stateCode作为SelectedVal
来自hcp_state vw
哪里
(案件
当(:stateCode ='')时(1)
当(:stateCode!=``)然后(vw.state_cd在(:stateCode)中)
(其他0)
结束)
;
最佳答案
您可以将where
子句编写为:
where (case when (:stateCode = '') then (1)
when (:stateCode != '') and (vw.state_cd in (:stateCode)) then 1
else 0)
end) = 1;
或者,完全删除
case
:where (:stateCode = '') or
((:stateCode != '') and vw.state_cd in (:stateCode));
或者,甚至更好:
where (:stateCode = '') or vw.state_cd in (:stateCode)
关于sql - Oracle中带有CASE语句的条件WHERE子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18104884/