Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中带CASE语句的条件WHERE子句_Sql_Oracle_Where Clause - Fatal编程技术网

Sql Oracle中带CASE语句的条件WHERE子句

Sql Oracle中带CASE语句的条件WHERE子句,sql,oracle,where-clause,Sql,Oracle,Where Clause,我是甲骨文世界的新手,所以这可能是一个垒球。在使用SSRS报告时,我将向视图传递一系列状态。问题在于,用户还可以从状态列表中选择一个名为“[无选择]”的选项。。。(这部分不是通过做来完成的,我一直坚持用这种方式来实现) 如果他们选择“无选择”选项,那么我只想在默认情况下返回所有状态,否则只返回逗号分隔列表中的状态列表 这看起来真的很容易,但我被卡住了。这是我到目前为止的代码(只是试图让一个样本工作),但我的眼睛终于在试图让它运行时交叉了 有人能告诉我这方面的方向吗 begin :stateC

我是甲骨文世界的新手,所以这可能是一个垒球。在使用SSRS报告时,我将向视图传递一系列状态。问题在于,用户还可以从状态列表中选择一个名为“[无选择]”的选项。。。(这部分不是通过做来完成的,我一直坚持用这种方式来实现)

如果他们选择“无选择”选项,那么我只想在默认情况下返回所有状态,否则只返回逗号分隔列表中的状态列表

这看起来真的很容易,但我被卡住了。这是我到目前为止的代码(只是试图让一个样本工作),但我的眼睛终于在试图让它运行时交叉了

有人能告诉我这方面的方向吗

begin :stateCode:='MO,FL,TX'; --:stateCode:='[ No Selection ]'; end; / select count(*) as StateCount, :stateCode as SelectedVal from hcp_state vw where (case when (:stateCode = '') then (1) when (:stateCode != '') then (vw.state_cd in (:stateCode)) (else 0) end) ; 开始 :州代码:='MO,FL,TX'; --:stateCode:='[无选择]'; 结束; / 选择count(*)作为StateCount,:stateCode作为SelectedVal 来自hcp_州大众汽车公司 哪里 (案例 当(:stateCode='')然后(1) 当(:stateCode!='')然后(vw.state_cd in(:stateCode)) (其他0) (完) ;
您可以将
where
子句编写为:

where (case when (:stateCode = '') then (1)
            when (:stateCode != '') and (vw.state_cd in (:stateCode)) then 1
            else 0)
       end) = 1;
或者,完全删除
案例

where (:stateCode = '') or
      ((:stateCode != '') and vw.state_cd in (:stateCode));
或者,更好的是:

where (:stateCode = '') or vw.state_cd in (:stateCode)

(否则为0)
不应使用括号。@zygimantus。非常感谢。真奇怪,没有编辑历史记录,因为代码的格式与我通常的缩进风格大不相同。现在都修好了。