构建交叉表查询所需的帮助 - PostgreSQL

时间:2014-04-10 05:02:25

标签: database postgresql pivot

我有两张桌子。

表1:

Label   Date    CT
A   2014-01-01  19
A   2014-02-01  10
A   2014-03-01  19
A   2014-04-01  18
B   2014-01-01  20
B   2014-02-01  16
B   2014-03-01  14
B   2014-04-01  16
C   2014-01-01  13
C   2014-02-01  12
C   2014-03-01  19
C   2014-04-01  14

表2:

Label   Date    CT
D   2014-01-01  19
D   2014-02-01  10
D   2014-03-01  19
D   2014-04-01  18
E   2014-01-01  20
E   2014-02-01  16
E   2014-03-01  14
E   2014-04-01  16
F   2014-01-01  13
F   2014-02-01  12
F   2014-03-01  19
F   2014-04-01  14

期望输出:

Label   Jan'14  Feb'14  Mar'14  Apr'14  Total
A   19  10  19  18  66
B   20  16  14  16  66
C   13  12  19  14  58
D   19  10  19  18  66
E   20  16  14  16  66
F   13  12  19  14  58

我是PostgreSQL的新手。

我想从表格中获取Label列的唯一值。

并将计数总和计算到各自的标签。

我可以使用UNION ALL以简单的方法将这两个表组合在一起。

但那并没有给我所需的输出或视图像枢轴。

我确实谷歌这个,但没有什么可以帮助我。

在SO中遇到this。而且我还在继续尝试。

但实际上我并不知道是否可以这样做。

有人可以帮助我获得所需的输出。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

尝试这样

select *,("Jan ''14" + "Feb ''14" + "Mar ''14" +"Apr ''14") as total 
from crosstab($$ 

select id,to_char(da,'Mon ''yy') as tt,no from t2

union all 

select id,to_char(da,'Mon ''yy') as tt,no from "T1"
 $$,$$values ('Jan ''14'), ('Feb ''14'),('Mar ''14'),('Apr ''14') $$) as at
(id text, "Jan ''14" integer,"Feb ''14" integer,"Mar ''14" integer,
"Apr ''14" integer) order by id