在雪花中使用"LEVEL"重写查询



如何将此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中,有必要将previorconnect-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|

相关内容

  • 没有找到相关文章

最新更新