如何通过SQL查询在Snowflake中实现多列合并为单列并生成交叉组合的输出表
实现Snowflake中src/dst列拆分后交叉组合的SQL方案
当然可以实现这个需求!利用Snowflake支持的LATERAL JOIN,我们可以轻松对每行的src和dst值进行拆分,再做交叉组合。以下是直接可用的SQL查询:
SELECT t.Date, src_options.src, dst_options.dst, t.Value FROM TABLE1 t -- 拆分当前行的src_country和src_state为独立的src值 LATERAL ( SELECT t.src_country AS src UNION ALL SELECT t.src_State AS src ) src_options -- 拆分当前行的dst_country和dst_state为独立的dst值,并与src做交叉组合 LATERAL ( SELECT t.dst_country AS dst UNION ALL SELECT t.dst_state AS dst ) dst_options -- 可选:按src和dst排序,匹配你给出的输出顺序 ORDER BY src, dst;
逻辑解释:
- 拆分src列:第一个
LATERAL子查询会把原表每行的src_country和src_State拆分成两条独立的记录,比如原表第一行的a和d会变成两个单独的src值。 - 拆分dst列并交叉:第二个
LATERAL子查询同理拆分dst_country和dst_state,同时因为是和第一个LATERAL子查询关联,会自动生成每行所有src值和所有dst值的交叉组合(每行生成2*2=4条记录)。 - 保留原字段:我们直接引用原表的
Date和Value,确保每条交叉后的记录都继承原行的这两个字段值。
执行这个查询后,会生成你需要的12条记录,和你给出的输出结构完全一致。
内容的提问来源于stack exchange,提问作者Py1996
相关产品推荐
相关产品推荐

