[oracle]案件在 WHERE 子句中使用的表达式

标签: sql Oracle
发布时间: 2017/4/14 23:57:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

需要时 var1 等于 'Y' 查询结果包含列的表 = 'Y',但是当 var1 = 'n' 的结果应该是与 'Y' 的列数据和 ' N '。 我需要把它放在一个 where 子句,因为我使用的 oracle 形式。 我试过这种方式,但没有显示任何 resutl 的查询︰

SELECT  *
FROM    table
WHERE   column1 IN ((CASE WHEN var1 = 'Y' THEN q'[('Y')]'
                                  ELSE TO_CHAR(q'[('Y','N')]')
                                  END))

你可以帮我吗?谢谢。

解决方法 1:

没有必要为 CASE 逻辑在这里,作为你可以适合这成定期 WHERE 布尔逻辑,环绕每个条件子句 (var1 = 'Y', var1 <> 'Y')() 组。

SELECT *
FROM table
WHERE
  (var1 = 'Y' AND column1 = 'Y')
  OR (var1 <> 'Y' AND column1 IN ('Y','N'))

请注意,我使用 var1 <> 'Y' 来模仿你 ELSE 但是如果真是只有两个可能的值的情况下, Y/N 您可以使用 var1 = 'N' 为清楚起见。

WHERE
  (var1 = 'Y' AND column1 = 'Y')
  OR (var1 = 'N' AND column1 IN ('Y','N'))

实际上,如果 Y/N 是唯一可能值为 column1 ,然后它可以简化为︰

WHERE
  (var1 = 'Y' AND column1 = 'Y')
  -- Returns all rows for column1 if Y,N are the only possible values
  -- No need to explicitly filter it
  OR (var1 <> 'Y')
赞助商