snowflake case 语句 - Return 1 如果值存在于列中,否则 return 0

snowflake case statement - Return 1 if value exists in column, else return 0

如果列中存在值,我将尝试简单地 return 一个 1(表示真)和一个 0(表示假)。

table 如下所示

Col A 
1/1/2020
1/2/2020
1/3/2020
<null>

目标输出如下:

Col A     Col B
1/1/2020  1
1/2/2020  1
1/3/2020  1
<null>    0 

是否可以做一个 case 语句来创建 Col_B 使得我 return 如果 A 列中存在值则为 1,如果 [=26 中不存在值则为 0 =] ?

像这样:

SELECT * ,
CASE WHEN d.COL_A exists then 1 
ELSE 0 END AS Col_B

FROM Data D

您只想与 NULL 进行比较吗?

select (case when columnA is not null then 1 else 0 end)
from data d;

舍弃 Snowflake 支持的其他替代方案

使用decode

select decode(colA, null, 0, 1) as colB

使用iff

select iff(colA is null, 0, 1) as colB

其他答案工作得很好......但是我认为这是使用 NVL2 的最佳时机,特别是如果你喜欢更简洁的代码或更少的输入:-)

SELECT NVL2(COL_A,1,0) FROM CTE

复制|粘贴|运行:

WITH CTE as 
  ( select '2020-01-01'::DATE COL_A
    union select '2020-02-01'::DATE COL_A
    union select '2020-03-01'::DATE COL_A
    union select null  COL_A) 

 SELECT COL_A, NVL2(COL_A,1,0) COL_B FROM CTE