我正在尝试使用 CASE 语句映射几个值。一切似乎都工作正常,除非 ID 列中有 NULL 值。它显示来自 else 的“其他状态”,而不是来自 WHEN NULL 的“无状态”。
SELECT ID,CASE ID
WHEN 'TR' THEN 'TRIPURA'
WHEN 'MN' THEN 'MANIPUR'
WHEN 'AS' THEN 'ASSAM'
WHEN 'NL' THEN 'NAGALAND'
WHEN 'AN' THEN 'ARUNACHAL'
WHEN NULL THEN 'NO STATE'
ELSE 'OTHER STATE'
END AS STATE
FROM GEOGRAPHY;
NULL 可以与 DECODE 一起使用,但不能与 CASE 一起使用。可以使用 CASE 语句比较 NULL 值吗?不要引用 NVL,NULL IF。我只想用 CASE 来实现。
我试图查看列表中是否存在 NULL 值,它应该返回“NO STATE”。
CASE
检查您的列的值是否等于您提供的值。 NULL
没有值,它不能等于任何东西,所以你不能那样做。
如果你迫切想只使用 CASE
并且避免使用 COALESCE
或 NVL
,你可以检查之前的 id IS NULL
,如下所示:
SELECT ID,
CASE WHEN ID IS NULL THEN 'NO STATE'
ELSE CASE ID
WHEN 'TR' THEN 'TRIPURA'
WHEN 'MN' THEN 'MANIPUR'
WHEN 'AS' THEN 'ASSAM'
WHEN 'NL' THEN 'NAGALAND'
WHEN 'AN' THEN 'ARUNACHAL'
ELSE 'OTHER STATE'
END END AS STATE
FROM GEOGRAPHY;
看到这个db<>小提琴
有多种选择;这是其中的一些。
样本数据:
SQL> with geography (id) as
2 (select 'TR' from dual union all
3 select 'TX' from dual union all
4 select null from dual
5 )
多种选择:
6 select id,
7 -- your CASE expression
8 case id when 'TR' then 'TRIPURA'
9 when 'MN' then 'MANIPUR'
10 when null then 'NO STATE'
11 else 'OTHER STATE'
12 end as state,
13 -- switch to this one
14 case when id is null then 'NO STATE'
15 when id = 'TR' then 'TRIPURA'
16 when id = 'MN' then 'MANIPUR'
17 else 'OTHER STATE'
18 end as state2,
19 -- or use NVL
20 case nvl(id, '-') when 'TR' then 'TRIPURA'
21 when 'MN' then 'MANIPUR'
22 when '-' then 'NO STATE'
23 else 'OTHER STATE'
24 end as state3
25 from geography;
ID STATE STATE2 STATE3
-- ----------- ----------- -----------
TR TRIPURA TRIPURA TRIPURA
TX OTHER STATE OTHER STATE OTHER STATE
OTHER STATE NO STATE NO STATE
SQL>