Snowflake中合并员工多职位多行记录为单行的技术咨询
Snowflake合并多职位员工记录为单行方案
在Snowflake里,你可以通过员工ID来识别重复的员工记录,再用LISTAGG()函数实现指定列的拼接,完全匹配你的需求。
具体操作步骤:
- 合并两张员工表
先把两张表的记录整合到一起,用UNION ALL保留所有原始记录(包括同一员工的多条职位记录),如果需要剔除完全重复的整行记录,换成UNION即可:
WITH combined_employees AS ( SELECT employee_id, name, job, building FROM table1 UNION ALL SELECT employee_id, name, job, building FROM table2 )
- 按员工ID分组拼接指定列
基于合并后的临时表,以employee_id和name为分组依据,用LISTAGG()分别拼接job和building列:
WITH combined_employees AS ( SELECT employee_id, name, job, building FROM table1 UNION ALL SELECT employee_id, name, job, building FROM table2 ) SELECT employee_id, name, LISTAGG(DISTINCT job, ', ') WITHIN GROUP (ORDER BY job) AS combined_jobs, LISTAGG(DISTINCT building, ', ') WITHIN GROUP (ORDER BY building) AS combined_buildings FROM combined_employees GROUP BY employee_id, name;
关键细节说明:
DISTINCT:如果同一员工的同一职位/办公地点在两张表重复出现,加上这个参数可以避免拼接重复内容WITHIN GROUP (ORDER BY ...):控制拼接内容的排序逻辑,让结果更规整- 分隔符:可以把
,换成你需要的任意分隔符,比如;或|
示例效果:
假设合并后的表有Suzy Q的两条记录:
| employee_id | name | job | building |
|---|---|---|---|
| 101 | Suzy Q | 销售主管 | A栋 |
| 101 | Suzy Q | 运营经理 | B栋 |
执行SQL后输出单行记录:
| employee_id | name | combined_jobs | combined_buildings |
|---|---|---|---|
| 101 | Suzy Q | 销售主管, 运营经理 | A栋, B栋 |
内容的提问来源于stack exchange,提问作者Ryan Coyle
相关产品推荐
相关产品推荐

