以下是我的方案
我有一个包含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')
请告知。
答案 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;
注意:只是在多个条件检查的情况下,CASE
与DECODE
相比更容易编写。此外,解码不能用于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的经验,您可能需要更改语法。