查询以列格式获取多行数据 - postgresql

query to fetch multiple row data in Columns format - postgresql

我有这样的 table 结构:Table - contact_details

role                email        userId
Primary Contact    a1@b.com        1
Secondary Contact  b1@b.com        1
End User           c1@b.com        1

Primary Contact    a2@b.com        2
Secondary Contact  b2@b.com        2

结果数据应该是:

Primary Contact       Secondary Contact    End User      UserId
a1@b.com                  b1@b.com          c1@b.com       1
a2@b.com                  b2@b.com          null           2

我无法将用户 ID -2 的最终用户检索为“null”,发生的情况是,如果所有三个角色都存在数据,则整行出现,或者如果任何角色丢失,则整行丢失。

谁能推荐一下方法吗?

-- Postgres 版本 - 12

你可以试试这个(条件聚合)

select
  max(case when role = 'Primary Contact' then email else null end) as PrimaryContact,
  max(case when role = 'Secondary Contact' then email else null end) as SecondaryContact,
  max(case when role = 'End User' then email else null end) as EndUser,
  userId    
from contact_details
group by userId