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 1
为NULL
时成功显示value 2
,但当value1
和value2
都为[=时,在第三个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')
当其他值为 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 1
为NULL
时成功显示value 2
,但当value1
和value2
都为[=时,在第三个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')