You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:40:21