null记录的case语句

时间:2014-10-02 22:08:09

标签: sql oracle

以下是我的方案

我有一个包含Country和State列的表。我只有一行的值为USA和NY。

现在,如果用户选择NY,那么我必须显示纽约'如果不是纽约,则显示“没有记录”。

我尝试了下面的Oracle sql,它对我来说失败了。当我进入像MA这样的其他状态时,我期待“没有记录”,但我得到空值。

SELECT CASE WHEN STATE='NY' THEN 'New York'
            when state  <> 'NY' THEN 'No Records' end
from 
  abc
where 
  state in ('&state')

请告知。

4 个答案:

答案 0 :(得分:2)

如果您想确定一行,请使用聚合:

SELECT (CASE WHEN max(STATE) = 'NY' THEN 'New York'
             ELSE 'No Records'
        END)
from abc
where state in ('&state');

答案 1 :(得分:1)

改为使用ELSE

SELECT CASE WHEN STATE='NY' THEN 'New York'
            ELSE 'No Records' end
from 
  abc
where 
  state in ('&state')

答案 2 :(得分:1)

为什么重新发明轮子? CASE WHEN THEN...ELSE...相当于DECODE

SELECT DECODE(STATE, 'NY', 'New York', 'No Records') FROM TABLE

上述解码意味着,当状态具有值=&#39; NY&#39;,然后显示为&#39;纽约&#39;,对于其他任何内容,显示默认值为&#39; No Records& #39;

注意:只是在多个条件检查的情况下,CASEDECODE相比更容易编写。此外,解码不能用于PL / SQL代码,因为CASE是可能的。

答案 3 :(得分:0)

如果您不打算在用户没有选择NY时给出结果,那么查询表格似乎是一种浪费。不妨将它包装在IF / ELSE中。

IF ('&state' = 'NY') BEGIN
SELECT *
FROM ABC
WHERE state in ('&state')
END

ELSE BEGIN
SELECT "No Records"
END

P.S。我没有使用Oracle的经验,您可能需要更改语法。