3

我需要当 var1 等于“Y”时,查询显示列 =“Y”的表的结果,但是当 var1 =“N”时,结果应该是“Y”和“N”列的数据. 我需要把它放在 where 子句中,因为我使用的是 oracle 表单。我试过这种方式,但查询没有显示任何结果:

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

你能帮助我吗?谢谢你。

4

1 回答 1

2

这里不需要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')
于 2013-09-08T18:40:01.947 回答