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

Snowflake查询:从Table2获取Table1多代码单元格的代码描述

解决Snowflake中多代码描述拼接问题

示例表结构

先模拟你的表结构方便理解:

-- 创建Table1
CREATE OR REPLACE TABLE Table1 (ID INT, CODE VARCHAR);
INSERT INTO Table1 VALUES 
(1, '#20 #18'),
(2, '#15'),
(3, '#05 #10 #25');

-- 创建Table2
CREATE OR REPLACE TABLE Table2 (CODE VARCHAR, CodeDescription VARCHAR);
INSERT INTO Table2 VALUES 
('#20', '加急处理'),
('#18', '常规审核'),
('#15', '优先审批'),
('#05', '初始登记'),
('#10', '资料复核'),
('#25', '最终归档');

核心查询语句

使用SPLIT_TO_TABLE拆分多代码,关联表后用LISTAGG拼接描述:

SELECT 
    t1.ID,
    LISTAGG(t2.CodeDescription, ', ') WITHIN GROUP (ORDER BY t2.CodeDescription) AS CombinedDescriptions
FROM Table1 t1
-- 将空格分隔的CODE拆分为多行
JOIN TABLE(SPLIT_TO_TABLE(t1.CODE, ' ')) split_codes
-- 关联Table2获取对应描述
JOIN Table2 t2 ON split_codes.VALUE = t2.CODE
-- 按原表行分组,拼接描述
GROUP BY t1.ID
ORDER BY t1.ID;

关键函数说明

  • SPLIT_TO_TABLE:把字符串按指定分隔符(这里是空格)拆成多行记录,生成的临时表包含VALUE字段,存储拆分后的单个代码。
  • LISTAGG:分组后将多行字符串拼接为单个字符串,WITHIN GROUP (ORDER BY ...)用于控制拼接顺序,避免描述顺序混乱。

处理特殊情况(如连续空格)

如果你的CODE列存在多个连续空格,先清理再拆分:

SELECT 
    t1.ID,
    LISTAGG(t2.CodeDescription, ', ') WITHIN GROUP (ORDER BY t2.CodeDescription) AS CombinedDescriptions
FROM Table1 t1
-- 先替换连续空格为单个空格,再拆分
JOIN TABLE(SPLIT_TO_TABLE(REGEXP_REPLACE(t1.CODE, '\\s+', ' '), ' ')) split_codes
-- 过滤拆分后可能出现的空字符串
WHERE split_codes.VALUE != ''
JOIN Table2 t2 ON split_codes.VALUE = t2.CODE
GROUP BY t1.ID
ORDER BY t1.ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:21