以前曾多次询问有关转置的问题,但在将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)