如何将此SQL查询写入SNOWFLAKE?
从双重连接中选择等级lv,按等级<=3.
使用CONNECT by可以找到一些好的起点(https://docs.snowflake.com/en/sql-reference/constructs/connect-by.html)在这里(https://docs.snowflake.com/en/user-guide/queries-hierarchical.html)。
Snowflake还支持递归CTE。
您似乎想要将行重复三次。对于一个固定的、小的乘数,比如3,你可以列举数字:
select c.lv, a.*
from abc a
cross join (select 1 lv union all select 2 union all select 3) c
根据原始查询的精神,一种更通用的方法使用标准递归公共表表达式来生成数字:
with cte as (
select 1 lv
union all select lv + 1 from cte where lv <= 3
)
select c.lv, a.*
from abc a
cross join cte c
雪花中存在级别。与Oracle的区别在于:
- 在snowflake中,有必要将previor与connect-by-表达式一起使用
- 您不能只选择级别——select语句中应该有任何现有列
示例:
SELECT LEVEL, dummy FROM
(select 'X' dummy ) DUAL
CONNECT BY prior LEVEL <= 3;
LEVEL DUMMY
1 X
2 X
3 X
4 X
根据@Danil Suhomlinov的帖子,我们可以进一步简化使用COLUMN1用于特殊表双单列:
SELECT LEVEL,column1 FROM dual按先前级别连接<=3.级别|列1------+--------1|
2|
3|
4|