Snowflake中如何在LISTAGG函数中对含逗号字段值进行封装?
Snowflake中LISTAGG函数处理含逗号字段的封装方案
要实现预期结果,核心是先对每个NAME字段做预处理:判断字段值是否包含逗号,若包含则用双引号包裹,再执行LISTAGG拼接。
具体SQL语句如下:
SELECT ID, LISTAGG(DISTINCT CASE WHEN NAME LIKE '%,%' THEN '"' || NAME || '"' ELSE NAME END, ',' ) AS LIST FROM TEST_TABLE GROUP BY ID;
逻辑说明:
- 通过
CASE WHEN结合LIKE '%,%'判断NAME是否包含逗号 - 含逗号的字段值用双引号前后包裹(
'"' || NAME || '"'),无逗号的保持原内容 - 基于预处理后的字段执行
LISTAGG(DISTINCT ...),按ID分组完成拼接
执行后将得到目标结果:
| ID | LIST |
|---|---|
| 1 | PC,"PC,A" |
| 2 | ER |
内容的提问来源于stack exchange,提问作者Grant Culp
相关产品推荐
相关产品推荐

