我们可以在Oracle SQL中的CASE
语句中返回THEN
中的多个值吗?
我想在CASE
的THEN
语句中获取多个值,这取决于我想在THEN
中获取多个值的时间。
select IDt.,
t.TERM_CODE,
t.DETAIL_CODE
from tableName t
where t.TERM_CODE = :term
and t.DETAIL_CODE IN (select t.DETAIL_CODE
from tableName a
where case when a.TERM_CODE = '202310'
then a.DETAIL_CODE in ('A','B','C')
when a.TERM_CODE = '202320'
then a.DETAIL_CODE in ('D','E','F')
when a.TERM_CODE = '202330'
then a.DETAIL_CODE in ('G','H','I')
);
这是我的查询,在这里我想得到多个Detail_Codes
在我的THEN
基于用户给定的术语代码.因此,对于每个术语代码,我有不同的详细代码,我已经使用的情况下,然后采取.然而,我无法得到所需的输出.
基本上,如果用户输入的术语为202320,那么我的查询应该选择第二种情况,详细代码应该是('D', 'E', 'F')
。
有人能帮我解决这个问题吗?或者提供一个替代的解决方案?
3条答案
按热度按时间hgqdbh6s1#
不能从
CASE
表达式的THEN
子句返回表达式;它需要返回一个标量值。另外,你有AND t.DETAIL_CODE IN (SELECT t.DETAIL_CODE FROM ...
,就像做AND 1 IN (SELECT 1 FROM ...
一样。使用
AND
和OR
:或者使用带有多个参数的
IN
:hc8w905p2#
也许你可以考虑创建一个带有详细代码的表,而不是在你的查询(或查询)中硬编码值。它将保留你可以从任何sql或pl/sql使用的数据。
例如,如果您的详细信息数据表如下所示:
。。。然后沿着一些术语样本数据。。
你可以像这样选择:
tuwxkamq3#
是的,你可以使用对象来实现这个,包括从case表达式返回条件。即使是不同类型的参数和算法使用继承。像这样:
对象是这样创建的: