SQL如果' x'然后包括所有可能的值

时间:2015-06-10 03:20:45

标签: sql oracle

我正在Oracle SQL中编写一个查询,并尝试添加一个在检查时限制结果的提示,如果不加以检查,则忽略条件(或返回所有可能的结果)。具体而言,查询将返回全球所有员工。复选框(可能的值为Y或N)仅将结果限制为北美(使用字段'国家'以及值' USA'' CAN' )。还有很多其他国家,而不是列出所有国家,我只想说"包括所有价值观"或"忽略限制标准"。

基本上我试图这样做: 如果选中该框,则仅返回其国家/地区字段中的值为USA或CAN的员工。 如果未选中该框,则返回所有员工,无论国家/地区字段中的值如何。

我尝试了一个案例陈述

[COUNTRY] = CASE WHEN (PROMPT = 'Y') THEN ('USA' OR 'CAN')
WHEN (PROMPT = 'N') THEN (LIKE '%') END

但是我收到了错误消息 1)THEN之后的多个值(使用"' USA'或' CAN'")和 2)如何编码"任何值"在PROMPT = N部分。

我已经尝试了OR,IN,ANY的多种排列,因为多个THEN值无济于事。我已经研究并尝试了通配符%和_的排列,用于“任何值”和#39;部分。我也尝试将其写成IF语句,但这也不起作用。

我是sql新手,非常感谢任何帮助!谢谢!

2 个答案:

答案 0 :(得分:0)

其中一种方法是:

WHERE 1 = CASE WHEN (PROMPT = 'Y') THEN 
   CASE [COUNTRY] IN ('USA','CAN') THEN 1 ELSE 0 END
WHEN (PROMPT = 'N') THEN 1
ELSE 0 END

答案 1 :(得分:0)

最简单的方法是使用OR语句。当提示的值表示"给我所有的东西"时,不需要进行任何进一步的测试。

where  (
              (:PROMPT = 'Y' and COUNTRY IN ('USA', 'CAN') )
          or  (:PROMPT = 'N')
       )

注意:表示参数的语法将根据您调用查询的方式而有所不同。我已使用上面的:PROMPT,但将其更改为您需要的任何内容。