我有以下数据:
ID CLASS VALUE
1 NHB 700905.7243
1 HBW 164216.1311
1 HBO 700905.7243
2 NHB 146023.3792
2 HBW 89543.2972
2 HBO 82152.072
3 NHB 1409818.328
3 HBW 220430.7922
3 HBO 323512.9391
4 NHB 48711.3814
4 HBW 163385.1575
4 HBO 363352.3441
字符串
我想把它重新组织成以下内容:
ID HBO HBW NHB
1 700905.7243 164216.1311 700905.7243
2 82152.072 89543.2972 146023.3792
3 323512.9391 220430.7922 1409818.328
4 363352.3441 163385.1575 48711.3814
型
请注意,HBW、HBO和NHB列中的数值为总计(总和)。
下面是我用来创建输出的脚本:
-- CREATE EXTENSION tablefunc;
SELECT *
FROM CROSSTAB
(
'SELECT _tlfd.id,
_tlfd."class",
_tlfd."value"
FROM public._tlfd
WHERE _tlfd."class" = ''HBW'' or _tlfd."class" = ''HBO'' or _tlfd."class" = ''NHB''
ORDER BY 1,2'
)
AS
(
"class" int,
"HBW" text,
"HBO" text,
"NHB" text,
--"Purpose" varchar,
"value" double precision
);
型
当我运行脚本时,我得到这个错误:
ERROR: return and sql tuple descriptions are incompatible.
型
我在剧本里做错了什么?
1条答案
按热度按时间bnl4lu3b1#
我在PostGres 9.3中使用:
字符串
生成所需的输出。
基本更改
t
**)"value"
double precision
,也称为float8
)剩下的就是品味和风格的问题了,不过我不会用
value
作为列名,因为它是一个reserved word in SQL。crosstab()
查询的基本知识: