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