我正在连接两个用于记录雇佣记录的表。我需要将具有多个职位的雇员合并到一行中,并且只使用几列指定其他职位。例如:
| 员工姓名|工作|建筑物|识别号|
| - ------|- ------|- ------|- ------|
| 苏西·Q|贝克|厨房|第二章|
| 苏西·Q|尼姑|教堂|第二章|
预期输出
| 员工姓名|工作|建筑物|识别号|
| - ------|- ------|- ------|- ------|
| 苏西·Q|贝克修女|厨房,教堂|第二章|
对于如何在员工列表中识别某人是否重复,我有点不知所措。本例中的DB是Snowflake,如果它有区别的话。我有根据的猜测是,以某种方式在ID中找到重复项,然后将重复项的结果连接到工作和建筑字段中,但我愿意听取建议。
2条答案
按热度按时间xn1cxnb41#
尝试使用LISTAGG函数
5m1hhzi42#
虽然LISTAGG是一个可用于解决此问题的子句-但此子句仅在Oracle中可用。
此子句在PostgreSQL中的等效语句为STRING_AGG。您可以尝试以下语句来生成所需的输出-这是通过将Job和Building的所有条目聚合到一个字符串中来实现的。然后使用GROUP BY将所有条目按雇员姓名聚合到一个逗号分隔的字符串中。