如何在Snowflake中基于Quantity列值用SQL重复数据行
在Snowflake中根据列值重复数据行的实现方法
Snowflake不支持Oracle风格的CONNECT BY层次查询,也无法通过DUAL表实现行重复需求,你可以用以下两种原生方法实现:
方法1:LATERAL JOIN + GENERATOR函数
这是最直接的方式,利用GENERATOR函数生成指定行数的记录,再通过LATERAL JOIN关联原表:
SELECT t.Id FROM your_table t LATERAL JOIN TABLE(GENERATOR(ROWCOUNT => t.Quantity)) g;
方法2:LATERAL JOIN + FLATTEN + ARRAY_GENERATE_RANGE
通过生成包含指定数量元素的数组,再用FLATTEN展开数组实现行重复:
SELECT t.Id FROM your_table t, LATERAL FLATTEN(INPUT => ARRAY_GENERATE_RANGE(1, t.Quantity + 1));
测试示例
如果你的测试数据如下:
CREATE OR REPLACE TEMP TABLE test_data ( Id INT, Quantity INT ); INSERT INTO test_data VALUES (1, 3), (2, 2), (3, 1);
执行上述任意一种查询,都会得到以下结果:
Id 1 1 1 2 2 3
内容的提问来源于stack exchange,提问作者Ali Alghaithi
相关产品推荐
相关产品推荐

