2016-04-07 9 views
0

私はテーブルに 上院議員を持っている:私が作成したい SNAME(FK) legnumpostgresqlの結合テーブルをどのようにピボットするのですか?

: SNAME(キー) パーティ<は、民主党やテーブルで スポンサーに加わった共和党

thatsのこと--can

|Democrat | Republican | legnum | 
|Clinton | McCain | 1234 | 

****基本的に私は上院議員のリストを使用してテーブルを作成し、2つの缶を置く必要があります法案を後援している候補者(各当事者から1人)。私はpostresqlでこれをどうやって行うのですか? *****

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; 

上記は私が書いたクエリであり、動作しません。

+0

サンプルデータと希望の結果で質問を編集してください。 –

答えて

0

私はあなたが条件付きの集約でこれを行うことができると思います。

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_agg()またはstring_agg()を使用することができます。

関連する問題