【问题标题】:Can we write case statement without having else statement我们可以在没有 else 语句的情况下编写 case 语句吗
【发布时间】:2017-02-27 08:33:39
【问题描述】:

我有这个问题:

select case when id=1 then 'A'
when id=2 then 'B'
end 
from test

它给了我 o/p as

身份证
一个



我不想在我的输出中有 NULL 值,我只想在 A 和 B 中进行比较,是否可以在 case 语句中进行比较。

【问题讨论】:

  • 测试表有 5 行:1 行 id=1,1 行 id=2,其他值不同。如果您不放置任何 WHERE 条件,则结果集将始终包含 5 行。因此,如果您需要限制行数,则需要 WHERE 条件。但这与 CASE 子句无关,因为它(本身)不会以任何方式限制结果集。

标签: sql sql-server sql-server-2008 select case


【解决方案1】:

给你:

select case when id=1 then 'A'
when id=2 then 'B'
end 
from test
where id is not null 

或者这个:

select case when id=1 then 'A'
when id=2 then 'B'
end 
from test
where id <> null

【讨论】:

  • 是什么让你认为 id 会为空?它可能不会为空。 ids 通常不是。
【解决方案2】:

case 表达式只能操作表达式的值,不能从结果中删除行。如果您想从结果中省略 nulls,则必须添加 where 子句:

SELECT CASE WHEN id = 1 THEN 'A'
            WHEN id = 2 THEN 'B'
       END 
FROM   test
WHERE  id IN (1, 2) -- HERE

【讨论】:

    【解决方案3】:

    您可以使用WHERE 子句来限制输出。

    SELECT CASE WHEN id=1 THEN 'A'
    WHEN id=2 THEN 'B'
    END 
    FROM test
    WHERE id IN (1,2)
    

    或者,如果您想展示其他值而不是 null,请在 CASE 语句中使用 else 部分。

    SELECT CASE WHEN id=1 THEN 'A'
    WHEN id=2 THEN 'B' ELSE 'Invalid'
    END 
    FROM test
    

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多