如何在postgresql中透视联接表?

如何在postgresql中透视联接表?,sql,postgresql,inner-join,pivot-table,Sql,Postgresql,Inner Join,Pivot Table,我有一张桌子 参议员: sname(键) party我认为您可以通过条件聚合实现这一点: select sp.legnum, max(case when se.party = 'D' then se.name end) as Democrat, max(case when se.party = 'R' then se.name end) as Republican from senators se join sponsors sp on sp.sn

我有一张桌子 参议员: sname(键)
party我认为您可以通过条件聚合实现这一点:

select sp.legnum,
       max(case when se.party = 'D' then se.name end) as Democrat,
       max(case when se.party = 'R' then se.name end) as Republican
from senators se join
     sponsors sp
     on sp.sname = se.sname
group by sp.legnum;

如果您需要按参与方列出所有赞助商的列表,可以使用
array\u agg()
string\u agg()

请使用示例数据和所需结果编辑您的问题。
SELECT Democrat, Republican, legnum
FROM
     (select distinct sname, legnum, ROW_NUMBER() over
     (Partition By sname Order By sname) as ColumnSequence 
     from senators
     inner join sponsors
     on sponsors.sname = senators.sname)
pivot
( 
     max(sname)
     for ColumnSequence in (Democrat, Republican))
 )PIV;
select sp.legnum,
       max(case when se.party = 'D' then se.name end) as Democrat,
       max(case when se.party = 'R' then se.name end) as Republican
from senators se join
     sponsors sp
     on sp.sname = se.sname
group by sp.legnum;