CASE 语句中的空值

Nulls within a CASE Statement

当其他值为 NULL.

时,我在返回一个值时遇到问题

我的SQL如下:

select id
, CASE WHEN value1 IS NOT NULL THEN value1
       WHEN value1 IS NULL THEN value2
       WHEN value1 IS NULL AND value2 IS NULL THEN value 3
       END
from ('table containing these values')

value 1NULL时成功显示value 2,但当value1value2都为[=时,在第三个case中成功显示value 2 11=],一直返回空白。

是否需要对 CASE WHEN 语句进行一些重组?

我认为你应该使用 coalesce:

select coalesce(value1, value2, value3)

case 的正确格式是:

SELECT (CASE WHEN value1 IS NOT NULL THEN value1
             WHEN value2 IS NOT NULL THEN value2
             ELSE value3
        END)

问题在于您应用 CASE 选项的顺序,尝试:

select id
, CASE WHEN value1 IS NULL AND value2 IS NULL THEN value 3
       WHEN value1 IS NOT NULL THEN value1
       WHEN value1 IS NULL THEN value2
       END
from ('table containing these values')

第三种情况从来没有用过,因为第一种情况和第二种情况互为补充,所以涵盖了所有的可能性。

更改顺序,以便在第二个案例之前检查第三个案例:

select id
, CASE WHEN value1 IS NOT NULL THEN value1
       WHEN value1 IS NULL AND value2 IS NULL THEN value3
       WHEN value1 IS NULL THEN value2
       END
from ('table containing these values')

但是,其中两个条件是多余的,如您所知,如果满足第一个条件,value1 总是 null

select id
, CASE WHEN value1 IS NOT NULL THEN value1
       WHEN value2 IS NULL THEN value3
       ELSE value2
       END
from ('table containing these values')