基于 SQL/Snowflake 中两个数据集的条件逻辑
Conditional logic based on two datasets in SQL/Snowflake
所以我在数据库中有两个数据集
DF1
ID value
001 A
002 A
003 B
004 C
我还有如下其他数据集
ID content
002 walter
003 hank
所以我想做的就是在 Snowflake 中创建一个 Common Table Expression(CTE),如果 DF1 中的 ID 出现在 DF2 中,那么一个新变量表示这个(1 或 0)
最终结果
ID value id_exist
001 A 0
002 A 1
003 B 1
004 C 0
with DF1 as
(
select * from (values (1, 'A'), (2, 'A'), (3, 'B'), (4, 'C')) as X(ID, VALUE)
),
DF2 as
(
select ID, CONTENT from (values (2, 'Walter'), (3, 'Hank')) as X(ID, CONTENT)
)
select DF1.ID, DF1.VALUE, iff(DF2.ID is not null, 1, 0) as ID_EXISTS from DF1 left join DF2 on DF1.ID = DF2.ID
;
如果想使用 CTE,您可以这样做:
with cte1 as
(select 1 as vcount, id
from df2
)
select a.id, a.value, coalesce(b.vcount, 0) as id_exist
from df1 a
left join cte1 b
on b.id = a.id
所以我在数据库中有两个数据集
DF1
ID value
001 A
002 A
003 B
004 C
我还有如下其他数据集
ID content
002 walter
003 hank
所以我想做的就是在 Snowflake 中创建一个 Common Table Expression(CTE),如果 DF1 中的 ID 出现在 DF2 中,那么一个新变量表示这个(1 或 0)
最终结果
ID value id_exist
001 A 0
002 A 1
003 B 1
004 C 0
with DF1 as
(
select * from (values (1, 'A'), (2, 'A'), (3, 'B'), (4, 'C')) as X(ID, VALUE)
),
DF2 as
(
select ID, CONTENT from (values (2, 'Walter'), (3, 'Hank')) as X(ID, CONTENT)
)
select DF1.ID, DF1.VALUE, iff(DF2.ID is not null, 1, 0) as ID_EXISTS from DF1 left join DF2 on DF1.ID = DF2.ID
;
如果想使用 CTE,您可以这样做:
with cte1 as
(select 1 as vcount, id
from df2
)
select a.id, a.value, coalesce(b.vcount, 0) as id_exist
from df1 a
left join cte1 b
on b.id = a.id