如何在Snowflake中按员工拼接所有关联城市并逐行展示?
在Snowflake中按员工拼接所有城市并在每行展示
需求是将每位员工的所有城市值拼接为字符串,同时在该员工的每一条记录中展示这个拼接结果。
原始数据表
| employee | city | color |
|---|---|---|
| john | montreal | blue |
| john | new york | yellow |
| john | yukon | red |
| mark | san francisco | orange |
| mark | baltimore | purple |
| ivan | london | black |
期望结果表
| employee | city | color |
|---|---|---|
| john | montreal ,new york ,yukon | blue |
| john | montreal ,new york ,yukon | yellow |
| john | montreal ,new york ,yukon | red |
| mark | san francisco,baltimore | orange |
| mark | san francisco,baltimore | purple |
| ivan | london | black |
解决方案
使用Snowflake内置的LISTAGG()窗口函数即可实现,该函数能按指定分组拼接字段值,并在每组的每一行返回拼接结果:
SELECT employee, LISTAGG(city, ', ') WITHIN GROUP (ORDER BY city) OVER (PARTITION BY employee) AS city, color FROM your_table_name;
参数说明:
LISTAGG(city, ', '):指定拼接字段为city,分隔符使用,(可根据需求调整,比如匹配示例格式可改成' ,')WITHIN GROUP (ORDER BY city):可选参数,用于定义拼接时城市的排序顺序,不需要特定顺序可省略OVER (PARTITION BY employee):按employee字段分组,确保每个员工的所有城市被拼接成一个字符串,且该员工的每一行都会显示这个结果
内容的提问来源于stack exchange,提问作者Lara L
相关产品推荐
相关产品推荐

