generate_series动态转置postgresql

时间:2015-12-20 08:55:45

标签: sql postgresql-9.1

以前曾多次询问有关转置的问题,但在将generate_series与某个“布尔”查询结合使用时,我找不到任何好的答案。

生成系列的输出是:

2015-12-01
2015-12-02
2015-12-03
... and so on 

我的问题是找出工作开始和停止是否符合某个特定日期 像:

INSERT INTO job (id, start, stop) VALUES
(11, '2015-11-01', '2015-11-10'),
(22, '2015-12-01', '2015-12-02'),
(33, '2015-12-03', '2015-12-04');

但是作业11不应该出现:

        2015-12-01  2015-12-02  2015-12-03  ...and so on
job22        1          1          0
job33        0          0          1

问题在于它必须具有动态性,因为日期范围可能会有所不同。一个蹩脚的尝试解决这个问题:

http://sqlfiddle.com/#!15/a776b/37

更新了问题

似乎交叉表可能应该做的伎俩,但我只会得到错误:

select * from crosstab('select generate_series(1,3)')
as ct (a int2,b int2,c int2)
  

错误:提供的sql必须返回3列rowid,类别和值

我做错了什么? generate_series中没有这样的列。

更新了问题#2

通过这种方式我没有错误,但输出不是所需的。

select * from crosstab('select i::int2,i::int2,i::int2 from      
generate_series(1,3) i')
as ct (a int2,b int2,c int2)

http://i.stack.imgur.com/pNrx7.png

0 个答案:

没有答案