如何在 Snowflake 中根据分隔符将列值拆分为多列

问题描述 投票:0回答:2

需要根据分隔符将列值拆分为多列, 还需要根据编号动态创建列。分隔符,分隔符可以是逗号左右。谢谢,

sql split snowflake-cloud-data-platform
2个回答
2
投票

在这种情况下,您最好使用数组。您尚未指定每个记录是否具有相同数量的分隔符,因此动态创建表列将需要编写一些脚本。如果是,您可以使用

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


0
投票

如果您有如下所示的数据:

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
© www.soinside.com 2019 - 2024. All rights reserved.