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

Snowflake:如何根据条件将数组值映射为星期名称?

正确解决方案:将数组映射为星期名称并拼接

原SQL的问题分析

你的SQL报错及逻辑问题如下:

  • 错误指定col1作为FLATTEN的输入列,实际需要处理的是day_val数组
  • 子查询未保留原表的ID、Col1~Col10等字段,外层查询无法引用tbl1.*导致报错
  • 未对数组元素做TRIM处理,元素带空格会导致DECODE匹配失败
  • 预期结果中的Wednsday是拼写错误,正确应为Wednesday

修正后的完整SQL

SELECT 
    t1.ID, t1.Col1, t1.Col2, t1.Col3, t1.col4, t1.Col5, t1.col6, t1.Col7, t1.Col8, t1.Col9, t1.col10, t1.day_val,
    LISTAGG(
        DECODE(TRIM(t.value), 
            '1','Sunday',
            '2','Monday',
            '3','Tuesday',
            '4','Wednesday',
            '5','Thursday',
            '6','Friday',
            '7','Saturday'
        ), ', ') WITHIN GROUP (ORDER BY TRIM(t.value)) AS Days
FROM tbl1 t1
LATERAL FLATTEN(input => t1.day_val) t
GROUP BY t1.ID, t1.Col1, t1.Col2, t1.Col3, t1.col4, t1.Col5, t1.col6, t1.Col7, t1.Col8, t1.Col9, t1.col10, t1.day_val
ORDER BY t1.ID;

关键说明

  1. 直接从原表关联LATERAL FLATTEN,保留所有原表字段,避免子查询导致的表引用问题
  2. 用TRIM(t.value)处理数组元素的空格,确保数字与DECODE的键准确匹配
  3. 通过LISTAGG按数字顺序拼接星期名称,保证结果顺序符合要求
  4. 修正了拼写错误,将Wednsday改为正确的Wednesday

执行结果

执行后会得到符合预期的输出:

ID   Col1   Col2    Col3    col4    Col5    col6    col7    col8    col9    col10    day_val                                 Days
101 null    b-col2  null    d-col4  null    null    f-col7  null    h-col9  g-col10  [  "3" ]                                Tuesday
102 null    Null    c-col3  null    d-col5  e-col6  null    g-col8  null    null     [  "1",  "3" ]                          Sunday, Tuesday
103 a-col1  Null    null    null    null    null    null    null    null    null     [   "1",  "2", "3", "4", "5"  ]         Sunday, Monday, Tuesday, Wednesday, Thursday
104 null    b-col2  null    d-col4  d-col5  null    null    null    null    null    [   "1",  "2", "3", "4", "5" , "6", "7" ] Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:34