为什么这个案例陈述不起作用?

时间:2014-03-28 19:00:30

标签: sql

为什么这个案例陈述不起作用?我的表定义如下。当M =" M"我希望案例返回true。如果不是,则为假。使用此CASE语句似乎看起来不对,但这是简单的case语句。但我认为可以根据需要提供尽可能多的WHEN值,但在这种情况下只有True或False,并且似乎没有任何不同。

输入应该是行中的所有M列。我期望输出是一行,因为我只有一行在列中有一个M值。在这种情况下,我不确定case语句是否应该返回false。

    CASE M = "M <-- is this is what the criteria is based on

我发现从下面的帖子中并非如此。当我意味着这看起来不正确时,我指的是两个代码的WHEN部分

    WHEN true THEN something

看起来不像通常那样。

代码:

select CASE M = "M"
       WHEN true  THEN "PPP"
       WHEN false THEN "False -- Look Again!"
       ELSE "Not Found"
       END  
from Bat;

图像:

enter image description here

新守则:

select *, 
       CASE 
       WHEN M = 'M'  THEN 

             Case
                 when O = 'O' then 'you found a double (MM)' <--Compiles but does not show result
             End    

       WHEN M is null THEN 'False -- Look Again!'       
       END as 'What is this value'
from Bat;

这解决了第一个问题,但你可以嵌入案例陈述N deep我会这么认为,如果我再次搜索O,它应该返回一个正确的。但第一种情况只返回一条记录。所以我的第二个案例必须在记录中搜索正确。

2 个答案:

答案 0 :(得分:0)

写这个的正常方法是:

select (CASE WHEN M = 'M' THEN 'PPP'
             WHEN M <> 'M' THEN 'False -- Look Again!'
             ELSE 'Not Found'
        END)  
from Bat;

或:

select (CASE WHEN M is null then 'Not Found'
             WHEN M = 'M' THEN 'PPP'
             ELSE 'False -- Look Again!'
        END)  
from Bat;

如果我不得不猜测,你的版本对NULL值有意想不到的行为,但很难说不知道你的期望或它在做什么。

答案 1 :(得分:0)

像这样改变

select CASE 
       WHEN M = 'M'  THEN 'PPP'
       WHEN M is null THEN 'False -- Look Again!'       
       ELSE "Not Found"
       END  
from Bat;