需要根据分隔符将列值拆分为多列, 还需要根据编号动态创建列。分隔符,分隔符可以是逗号左右。谢谢,
在这种情况下,您最好使用数组。您尚未指定每个记录是否具有相同数量的分隔符,因此动态创建表列将需要编写一些脚本。如果是,您可以使用
SPLIT
、LATERAL FLATTEN
和 PIVOT
,但数据透视需要静态列名称,因此您可能需要一个存储过程来处理它。
要回答您的第一个问题,您可以使用
SPLIT
和/或 SPLIT_PART
将列拆分为值。 SPLIT
函数为您创建一个数组,而 SPLIT_PART
函数创建数组,但从数组中输出单个值。
https://docs.snowflake.com/en/sql-reference/functions/split.html
https://docs.snowflake.com/en/sql-reference/functions/split_part.html
https://docs.snowflake.com/en/sql-reference/functions/flatten.html
https://docs.snowflake.com/en/sql-reference/constructs/pivot.html
如果您有如下所示的数据:
ROW_VALUE |
---|
鲍勃,CSE 510,CSE 594,CSE 310 |
安吉拉,CSE 580,CSE 594,CSE 320,CSE 510,CSE 310 |
然后您可以使用以下动态数据透视查询将这些逗号分隔值拆分为列:
with unpivoted_data as (
select *
from imported_data,
table(split_to_table(row_value, ',')) as t1
)
select *
from unpivoted_data
pivot (min(value) for index in (ANY));
查询将输出如下内容:
序列 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
2 | 安吉拉 | CSE 580 | CSE 594 | CSE 320 | CSE 510 | CSE 310 |
1 | 鲍勃 | CSE 510 | CSE 594 | CSE 310 |