我有一个编码,我需要使用条件运算符在 where
子句中使用多个参数 . 我写了以下查询,在这种情况下我不能使用 in
clasue . 请指导我如何从case子句返回多个参数 .
select * from cardimport
where
STATUS = CASE
WHEN STATUS = ''
THEN 'F'
ELSE STATUS
END
当 null
中的状态我要返回 'F'
和 'V'
时 . 现在它只返回 'F'
EDITED
select *
from CARDIMPORT
where STATUS = CASE
WHEN $P{status} = ''
THEN 'E'
ELSE $P{status}
END
当STATUS为null时,我想显示所有状态的记录,即 'E'
, 'I'
, 'A'
5 回答
你应该试试,
当status为null并且status不为null时,它将为您提供所有行,然后仅为您提供匹配的数据 .
我认为你不需要CASE,而是需要 NVL 和 NVL2 .
如果我正确理解了您的要求,则在状态值为NULL时需要特定行,否则在不为null时则返回所有行 .
例如,在下面的示例中,来自
EMP
表 . 如果参数值为NULL
,那么当not null
然后返回所有行时,我只期望comm
=300
的那一行 .NULL
NOT NULL
以上使用以下逻辑:
如果,传递的值为NULL,则返回
COMM = 300
的行 .否则,如果传递的值为NOT NULL,则返回所有行 .
可以从案例返回集合 . KU $ _VCNT是预定义的集合(
KU$_VCNT is table of varchar2(4000)
) .这种情况是必需的 . 但我发现你的理解可能有些不对劲,因为你试图将空状态与'F'/'V'相匹配,它永远不会变成真正的条件
如果你想在返回多个记录的情况下使用case子句,则上面只是条件
我不确定在_2729469中做到这一点,但通过以下方法可以在
Microsoft SQL SERVER
中实现: