PostgreSQL:将两列结果集透视到单行表中
我认为这是一个直截了当的手术 编辑:SQLFiddle可在以下位置获得: 使用PostgreSQL 9.4,假设我有一个返回以下两列集合的查询:PostgreSQL:将两列结果集透视到单行表中,postgresql,pivot,Postgresql,Pivot,我认为这是一个直截了当的手术 编辑:SQLFiddle可在以下位置获得: 使用PostgreSQL 9.4,假设我有一个返回以下两列集合的查询: CATEGORY | TOTAL all | 14 soccer | 5 baseball | 6 hockey | 3 但是,我更愿意将其集中到一个单行集合中: ALL | SOCCER | BASEBALL | HOCKEY 14 | 5 | 6 | 3 换句话说,我希望我的所有“CATEGORY”值
CATEGORY | TOTAL
all | 14
soccer | 5
baseball | 6
hockey | 3
但是,我更愿意将其集中到一个单行集合中:
ALL | SOCCER | BASEBALL | HOCKEY
14 | 5 | 6 | 3
换句话说,我希望我的所有“CATEGORY”值都变成列,相应的“TOTAL”值放在相应列下的第一行
我一直在尝试使用CROSSTAB()。。。但到目前为止,我得到了以下错误:
错误:返回“record”的函数需要列定义列表
以下是我试图将其作为SQL命令的内容,以供参考:
SELECT * FROM crosstab(
$$
WITH "countTotal" AS (
SELECT text 'all' AS "sportType", COUNT(*) AS "total"
FROM log
WHERE type = 'SPORT_EVENT_CREATED'
GROUP BY "sportType"
),
"countBySportType" AS (
SELECT sport_type AS "sportType", COUNT(*) AS "total"
FROM log
WHERE type = 'SPORT_EVENT_CREATED'
GROUP BY "sportType"
)
SELECT * FROM "countTotal"
UNION
SELECT * FROM "countBySportType"
$$
)
我认为您必须指定输出列的名称和类型。来自postgres手册 交叉表函数声明为返回记录集,因此 必须在中定义输出列的实际名称和类型 调用SELECT语句的FROM子句,例如:
从交叉表(“…”)中选择*作为ct(行名称文本、类别1文本、类别2文本)
必须使用crosstabN(text)
才能将其用于动态列数。这是关于交叉表查询的全部详细信息
还有一篇帖子你能为表格创建SQLFIDLE吗?@NandakumarV SQLFIDLE链接已添加!