【发布时间】:2022-01-17 23:57:06
【问题描述】:
我有一个表,其中列出了 12 个月跨多个列的一系列值(即 month_1_value、month_2_value 等),以及指示相关月份的其他列(例如:month_1_name = 202101、month_2_name = 202102 等.)
我正在尝试将其设置为“month_1_value”列将被称为“202101”,month_2_value 将被称为“202102”等。
这通常在 Python 这样的语言中非常容易做到,但我正在努力在 SQL/Snowflake 中找到正确的方法。
我可以使用 set min_month = min(month_1_name) 设置一个变量以包含该值,但我无法将其用作视图中的新别名或我尝试过的存储过程。
我希望实现的总体思路是这样的:
set min_month = min(month_1_name);
SELECT
month_1_value as $min_month
, month_2_value as $min_month+1
.....
FROM
Table
似乎应该有一个相当简单的方法来做到这一点,但我还没有找到它。甚至像首先在Javascript中设置变量,然后让另一个变量将该变量引用为字符串似乎也可以,但我正在努力寻找一个清晰的方法。任何建议将不胜感激。
【问题讨论】:
-
要在 Snowflake 中动态创建列别名,您需要使用存储过程。在存储过程中创建动态 SQL 很容易,但 Snowflake 存储过程不返回表,只返回标量值。如果这对您有用,我可以编写一个示例,但似乎更喜欢立即拿出一张桌子。没有办法做到这一点。
-
谢谢格雷格,我想这就是我苦苦挣扎的地方。我对其进行了一些修改,只是创建了一个视图,而我认为它应该适合我的目的。
标签: sql snowflake-cloud-data-platform dynamic-sql