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
如果列中存在值,我将尝试简单地 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