首页 > 解决方案 > 在 Postgress 错误中将行转换为列

问题描述

您好,我已经创建了一个视图,但想要对其进行旋转。

旋转前的输出:

在此处输入图像描述

预期输出:

在此处输入图像描述

我的完整查询:

SELECT *
FROM CROSSTAB(
  'SELECT DISTINCT GROUP_DEST::TEXT,DEST::TEXT,TIER::TEXT,RATE::TEXT  FROM  VBB_TIER   ORDER BY 1,2')
AS CT(ROW_NAME TEXT, TIER_1 TEXT, TIER_2 TEXT )

我收到此错误并且无法解决:

ERROR:  invalid source data SQL statement
DETAIL:  The provided SQL must return 3 columns: rowid, category, and values.
SQL state: 22023

标签: postgresqlpivotcrosstab

解决方案


使用过滤聚合通常比有些复杂的crosstab()函数容易得多:

select group_dest, 
       dest, 
       max(rate) filter (where tier in ('0-100', ('0-150')) as tier_1,
       max(rate) filter (where tier in ('101-200', '151-350') as tier_2
from vbb_tier
group by group_dest, dest;

推荐阅读