在postgres中创建一个支点

时间:2014-09-19 10:05:26

标签: sql postgresql pivot crosstab

我正在使用postgres RDBMS,并希望以此为基础。

如何在postgres中调整结果?

当我执行以下查询时,我得到了这个结果

enter image description here

我在张贴前试过这个!

select * from 
(
select count(tnx_id) as x,
case act_dt between 20140301 and 20140831 then '0-6 m'
when act_dt between 20130901 and 20140231 then '7-12 m'
when act_dt between 20130301 and 20130831 then '13-18 m'
else '18+'
end as act_bucket,

case when tnx_dt_int between 20140301 and 20140831 then '0-6 m'
when  tnx_dt_int between 20130901 and 20140231 then '7-12 m'
when tnx_dt_int between 20130301 and 20130831 then '13-18 m'
else '18+'
end as tnx_bucket



 from card 
inner join tnx on card_id=tnx_cardh_id
group by act_bucket,tnx_bucket)
x1
pivot(x)
(
for tnx_bucket in([0-6 m],[7-12 m],[13-18 m],[18+])
)



so that i get like this 

              act_bucket
tnx_bucket  0-6 m 7-12 m 13-18 m 18+
0-6m         <  here filled with Count(tnx_id)      >
7-12 m
13-18 m
18+

1 个答案:

答案 0 :(得分:2)

您正在寻找tablefunc postgreSQL module

crosstab个功能

这是它的一个例子(来自doc):

CREATE TABLE ct(id SERIAL, rowid TEXT, attribute TEXT, value TEXT);
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att1','val1');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att2','val2');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att3','val3');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att4','val4');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att1','val5');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att2','val6');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att3','val7');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att4','val8');

SELECT *
FROM crosstab(
  'select rowid, attribute, value
   from ct
   where attribute = ''att2'' or attribute = ''att3''
   order by 1,2')
AS ct(row_name text, category_1 text, category_2 text, category_3 text);

 row_name | category_1 | category_2 | category_3
----------+------------+------------+------------
 test1    | val2       | val3       |
 test2    | val6       | val7       |
(2 rows)
祝你好运!