PL/SQL在CASE语句中返回列表

PL/SQL在CASE语句中返回列表,sql,oracle,case,Sql,Oracle,Case,我需要一个CASE语句来返回字符串列表,但我遇到了一些语法问题。生成的SQL应该是这样的: SELECT * FROM FRUIT WHERE COLOR IN ('RED', 'YELLOW') 我想做的事没有用: SELECT * FROM FRUIT WHERE COLOR IN CASE WHEN TYPE = *something* THEN ('RED', 'YELLOW') ELSE ('GREEN') END 这项工作: SELECT * FROM F

我需要一个CASE语句来返回字符串列表,但我遇到了一些语法问题。生成的SQL应该是这样的:

SELECT * FROM FRUIT WHERE COLOR IN ('RED', 'YELLOW')
我想做的事没有用:

SELECT * FROM FRUIT WHERE COLOR IN
CASE
    WHEN TYPE = *something*
    THEN ('RED', 'YELLOW')
    ELSE ('GREEN')
END
这项工作:

SELECT * FROM FRUIT WHERE COLOR IN
CASE
    WHEN TYPE = 1
    THEN 'RED'
    ELSE 'GREEN'
END
我得到的错误是:

ORA-00907 missing right parenthesis
当我使用multiple COLOR='X'或COLOR='Y'时,它可以工作,但我想知道是否有一种方法可以只使用一个CASE语句。提前感谢。

案例语句只能返回一个值。我想你不需要CASE语句,你可以用IN-operation代替CASE,就像这样

SELECT * 
FROM FRUIT 
WHERE TYPE = 'something'  AND COLOR IN ('RED', 'YELLOW') 
OR TYPE <> 'something'  AND COLOR IN ('GREEN') 
Case语句只能返回一个值。我想你不需要CASE语句,你可以用IN-operation代替CASE,就像这样

SELECT * 
FROM FRUIT 
WHERE TYPE = 'something'  AND COLOR IN ('RED', 'YELLOW') 
OR TYPE <> 'something'  AND COLOR IN ('GREEN') 

只需使用布尔逻辑即可。使用大小写表达式没有好处。为什么不使用并集呢?当您需要从一个表中进行查询,但case where子句-unions是最常见的方式。您的预期输出是什么?@Used_By_已经是了,我将采用这种方法。谢谢。@Ychdziu我正在处理的真正的SQL表达式比这个例子要长得多,所以我想要一个更小、更易于维护的表达式。谢谢你的回复。只需使用布尔逻辑即可。使用大小写表达式没有好处。为什么不使用并集呢?当您需要从一个表中进行查询,但case where子句-unions是最常见的方式。您的预期输出是什么?@Used_By_已经是了,我将采用这种方法。谢谢。@Ychdziu我正在处理的真正的SQL表达式比这个例子要长得多,所以我想要一个更小、更易于维护的表达式。谢谢你的回复。哦,我明白了。我将使用这种方法。谢谢你,我会接受你的回答。哦,我明白了。我将使用这种方法。谢谢,我会接受你的回答。