【发布时间】:2015-12-31 07:00:39
【问题描述】:
我目前有一个表格m,格式如下:
id scenario period ct
2 1 1 1
2 1 2 1
2 1 3 1
2 1 4 1
2 2 1 1
2 2 2 1
2 2 3 1
2 2 4 1
2 3 1 1
2 3 2 1
2 3 3 1
2 3 4 1
我要创建下表:
id scenario period 1 2 3 4
2 1 1 1
2 1 2 1
2 1 3 1
2 1 4 1
2 2 1 1
2 2 2 1
2 2 3 1
2 2 4 1
2 3 1 1
2 3 2 1
2 3 3 1
2 3 4 1
已经在我的 Postgres 数据库中创建了 tablefunc 扩展。我目前正在尝试使用crosstab() 函数来完成数据透视。但是,我得到的表格如下所示:
id scenario period 1 2 3 4
2 1 1 1 1 1 1
我尝试的查询:
SELECT * FROM crosstab(
'SELECT id, scenario, period, ct FROM m
ORDER BY 1',
'SELECT DISTINCT period FROM m
ORDER BY 1')
AS (id, scenario, period, 1, 2, 3, 4);
【问题讨论】:
-
您提供的查询完全无效。 (列定义列表缺少数据类型)。您尝试的实际查询是什么?
-
我的数据集要大得多,但我想展示一个更简单的示例。我相信更正确的查询是: SELECT * FROM crosstab('SELECT id, scenario, period, ct FROM m ORDER BY 1', 'SELECT DISTINCT period FROM m ORDER BY 1') AS (id int, scenario int, period整数,“1”整数,“2”整数,“3”整数,“4”整数);
标签: sql postgresql pivot-table crosstab window-functions