[英]Rewrite a query with "LEVEL" in snowflake
如何将此 SQL 查询写入 SNOWFLAKE?
从 DUAL CONNECT BY LEVEL <= 3 中选择 LEVEL lv;
您可以使用 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 的区别在于:
例子:
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 CONNECT BY prior LEVEL <= 3; 水平 | COLUMN1 ------+-------- 1 |
2 |
3 |
4 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.