旋转桌子

时间:2019-02-05 13:54:33

标签: postgresql crosstab

Id Year Values
1 2014 10
1 2015 4
1 2016 7
1 2017 17
2 2014 5
2 2015 6
2 2016 7
2 2017 9

答案应该

Id 2014 2015 2016 2017
----------------------
1    10    4    7   17
2     5    6    7    9

我尝试如下

Select * 
from crosstab(select id,value,year from table)
As res(id int,year int,year int,year int,year int,year int);

1 个答案:

答案 0 :(得分:0)

除了使用crosstab()之外,还有一个选择是使用GROUP BY和一些聚合函数,例如MAX()CASE END来进行透视。
作为额外的好处,这是ANSI SQL,因此它将在大多数RDBMS系统中运行。

SELECT 
   Id
 , MAX(CASE WHEN <table>.Year = 2014 WHEN <table>.Values ELSE 0 END) AS 2014
 , MAX(CASE WHEN <table>.Year = 2015 WHEN <table>.Values ELSE 0 END) AS 2015 
 ...
 ...
FROM 
 <table>
GROUP BY 
 <table>.Id