如何在postgresql中透视连接表?

时间:2016-04-07 01:53:33

标签: sql postgresql inner-join pivot-table

我有一张桌子 参议员:     sname(键)     党< - 可以是民主党人或共和党人

那是由表加入的 赞助商:     sname(fk)     legnum

我想创建一个格式如下的表:

paste(
  format(my_dates, "%A"),
  c("night","morn","afternoon","night")[
    cut(as.numeric(format(my_dates,"%H")), c(0,5,11,17,23))
  ]
)
# [1] "Sunday night"     "Sunday afternoon" "Sunday afternoon" "Saturday night"  
# [5] "Sunday afternoon" "Sunday afternoon" "Saturday night"   "Sunday afternoon"
# [9] "Sunday afternoon" "Sunday afternoon"

****基本上我需要使用参议员名单创建一个表格,并将两个候选人(每个党派一个)赞成一个法案(legnum)。我如何在postresql中执行此操作? *****

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

以上是我写的一个不起作用的查询。

1 个答案:

答案 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()