如何在Snowflake中转置行?将Days列的11010011转为垂直多行格式
Snowflake中行转置:将字符串拆分为垂直多行
针对你需要把Days列的字符串(如11010011)转换为垂直多行的需求,以下是两种在Snowflake中可行的实现方案:
方案1:使用FLATTEN + SPLIT_TO_ARRAY
通过将字符串拆分为单个字符的数组,再展开数组实现行转置,同时保留字符的位置序号。
-- 替换为你的实际表名 WITH input_data AS ( SELECT ID, Days FROM your_table_name ) SELECT ID, INDEX + 1 AS Day, -- 从1开始计数天数位置 VALUE AS Value FROM input_data, LATERAL FLATTEN(INPUT => SPLIT_TO_ARRAY(Days, '')) ORDER BY ID, Day;
说明
SPLIT_TO_ARRAY(Days, ''):将Days字符串按空字符拆分,生成包含每个字符的数组LATERAL FLATTEN:展开数组,将每个数组元素转为一行数据INDEX是数组的默认索引(从0开始),加1后得到从1开始的天数位置
方案2:使用STRTOK_SPLIT_TO_TABLE
该函数可直接将字符串按指定分隔符拆分为表结构,同时返回元素的位置。
-- 替换为你的实际表名 SELECT ID, t.Value, t.Day FROM your_table_name, LATERAL STRTOK_SPLIT_TO_TABLE(Days, '') t(Value, Day) ORDER BY ID, Day;
说明
STRTOK_SPLIT_TO_TABLE(Days, ''):以空字符为分隔符拆分字符串,返回包含Value(字符内容)和Day(位置序号,从1开始)的表- 通过
LATERAL关联原表,实现每行数据的拆分展开
适配场景
- 两种方案都支持不同长度的
Days字符串,无需修改代码即可自适应处理 - 若需要过滤特定值(比如只保留
Value=1的行),可在SELECT后添加WHERE Value = '1'条件
内容的提问来源于stack exchange,提问作者sagyy_sf
相关产品推荐
相关产品推荐

