我是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/

10-12 22:50