我有一张像下一张桌子的桌子:
date value 1 value 2 value 3
----------------------------------------------------
01/01/2017 263 7 222
02/01/2017 275 -9 209
03/01/2017 331 -9 243
.
.
.
我想在postgres中创建另一个:
01/01/2017 02/01/2017 03/01/2017
value 1 263 275 331
value 2 7 -9 -9
value 3 222 209 243
但我的问题是我不知道我会有多少日期,所以我必须使用这样的东西:
SELECT * FROM crosstab(
$$ SELECT value1, date FROM myTable ORDER BY 1 $$,
$$ SELECT m FROM generate_series((select min(date) from myTable) ,(select max(date) from myTable), '1 month'::interval) m $$
) AS (
".." date, ".." date, ".." date, ".." date
);
有人可以帮助我吗?感谢。
答案 0 :(得分:0)
您的基本问题是PostgreSQL需要知道列的外观才能规划查询。因此,您需要返回某种固定列结构。有很多方法可以做到这一点:
但无论如何,如果不在某处动态生成查询,您无法在查询中执行此操作。