您可以使用附加模块tablefunc的crosstab()函数—每个数据库必须安装一次。从PostgreSQL 9.1开始,你可以使用CREATE EXTENSION:
CREATE EXTENSION tablefunc;
在你的情况下,我相信它会是这样的:
CREATE TABLE t (Section CHAR(1), Status VARCHAR(10), Count integer);
INSERT INTO t VALUES ('A', 'Active', 1);
INSERT INTO t VALUES ('A', 'Inactive', 2);
INSERT INTO t VALUES ('B', 'Active', 4);
INSERT INTO t VALUES ('B', 'Inactive', 5);
SELECT row_name AS Section,
category_1::integer AS Active,
category_2::integer AS Inactive
FROM crosstab('select section::text, status, count::text from t',2)
AS ct (row_name text, category_1 text, category_2 text);
DB这里:
一切正常:https://dbfiddle.uk/iKCW9Uhh
没有CREATE EXTENSION;你会得到这个错误:https://dbfiddle.uk/j8W1CMvI
错误:函数交叉表(未知,整数)不存在
第4行:FROM crosstab('select section::text, status, count::text fro…
^
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型强制转换。