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
相关产品推荐
相关产品推荐

