当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))
你能帮帮我吗?谢谢。
答案 0 :(得分: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')