2016-04-07 45 views
0

Ben bir tablo senatör vardır: sname (fk) legnumPostgresql'de birleştirilmiş tabloyu nasıl döndürürüm?

Ben oluşturmak istiyorum: sname (anahtar) parti < Demokrat veya masa sponsorlar katıldı Cumhuriyetçi

thats --can böyle biçimlendirilmiş bir tablo şu:

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

**** Temelde iki can senatör listesini kullanarak bir tablo oluşturmak için gereken ve koyun Bir fatura (legnum) sponsor olan diecast (her bir partiden bir). Bunu postresql'de nasıl yaparım? *****

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; 

Yukarıda yazdığım, çalışmayan bir sorgudur.

+0

Lütfen sorunuzunuzu örnek verilerle ve istenen sonuçlarla birlikte düzenleyin. –

cevap

0

Sana koşullu toplama ile yapabilirsiniz düşünüyorum: Eğer tarafça, bütün sponsorlar listesini isterseniz

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; 

Sen array_agg() veya string_agg() kullanabilirsiniz.