gpt4 book ai didi

sql - WHERE 表达式中的 CASE 使用 IN 子句

转载 作者:行者123 更新时间:2023-12-04 23:45:43 26 4
gpt4 key购买 nike

我需要当 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))

你能帮帮我吗?谢谢。

最佳答案

不需要 CASE这里的逻辑,因为您可以将其放入常规 WHERE带有 bool 逻辑的子句,包装每个条件 (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/Ncolumn1 的唯一可能值,那么它可以简化为:

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')

关于sql - WHERE 表达式中的 CASE 使用 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com