Sql Postgres-仅为一对多关系获取一行

Sql Postgres-仅为一对多关系获取一行,sql,postgresql,pivot,inner-join,aggregate-functions,Sql,Postgresql,Pivot,Inner Join,Aggregate Functions,我在博士后有两张桌子。它们之间存在一对多的关系 经理表 Id Designation 1 Manager Id Designation Report_To (ManagerId) 4 INFRA ENG 1 2 SOFT ENG 1 3 TEAM LEAD 1 团队成员表 Id Designation 1 Manager Id Designation Report_To (ManagerId)

我在博士后有两张桌子。它们之间存在一对多的关系

经理表

Id    Designation  
1     Manager
Id    Designation  Report_To (ManagerId) 
4     INFRA ENG    1
2     SOFT ENG     1
3     TEAM LEAD    1
团队成员表

Id    Designation  
1     Manager
Id    Designation  Report_To (ManagerId) 
4     INFRA ENG    1
2     SOFT ENG     1
3     TEAM LEAD    1
我必须以这样一种方式获取记录,即对于指定TeamMember为单独列的经理,我只能获得一行记录,如下所示:

结果:

ManagerId    INFRA  SOFT  TEAM
1            4      2     3
我尝试了左连接,但它给了我3行


他非常感谢您的帮助。

您可以执行条件聚合:

select report_to as manager_id, 
    max(id) filter(where designation = 'INFRA ENG') as infra,
    max(id) filter(where designation = 'SOFT ENG')  as soft,
    max(id) filter(where designation = 'TEAM LEAD') as team
from teammember 
group by report to
请注意,您无需携带
管理器
表即可获得显示的结果。但如果您出于其他原因需要它,您可以
加入

select m.*, 
    max(tm.id) filter(where tm.designation = 'INFRA ENG') as infra,
    max(tm.id) filter(where tm.designation = 'SOFT ENG')  as soft,
    max(tm.id) filter(where tm.designation = 'TEAM LEAD') as team
from manager m
inner join teammember tm on tm.report_to ) m.id
group by m.id