-1

如果列中存在值,我试图简单地返回一个 1 (代表真)和一个 0 (代表假)。

表格如下所示

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 ,如果 col A 中存在值,则返回 1 ,如果 Col_A 中不存在值,则返回 0 ?

像这样的东西:

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

FROM Data D
4

3 回答 3

1

你只是想比较NULL吗?

select (case when columnA is not null then 1 else 0 end)
from data d;
于 2021-08-23T15:35:55.433 回答
0

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

使用decode

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

使用iff

select iff(colA is null, 0, 1) as colB
于 2021-08-23T15:51:09.693 回答
0

其他答案效果很好……但是我认为这是使用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
于 2021-08-24T23:37:04.347 回答