首页 > 解决方案 > 带有 In 子句的 where 子句中的 case 语句

问题描述

我尝试在 where 子句中使用 case 语句,它需要根据传递给我的过程的参数值过滤我的 where 条件,但它没有用

其中 p_parameter ='Y' then 'Y' else ('Y','N') END in Hidden_​​flag_column 的情况

标签: caseoracle-sqldeveloper

解决方案


尝试

where 
case when p_parameter ='Y' 
     then case when Hidden_flag_column = 'Y' then 1 else 0 end
     else case when Hidden_flag_column in ('Y','N') then 1 else 0 end 
END = 1

p_parameter = 'Y' 以及 'N' 和 Hidden_​​flag_column = 'N' 的示例。

select * from dual
where 
case when 'N' ='Y' 
     then case when 'N' = 'Y' then 1 else 0 end
     else case when 'N' in ('Y','N') then 1 else 0 end 
END = 1

给出 1 行,而

select * from dual
where 
case when 'Y' ='Y' 
     then case when 'N' = 'Y' then 1 else 0 end
     else case when 'N' in ('Y','N') then 1 else 0 end 
END = 1

给出 0 行。


推荐阅读