您好,我已经创建了一个视图,但想对其进行透视。
旋转之前的输出:
tag1 | qmonth1 | qmonth2 | sum1
--------+-----------+-----------+--------
name1 | 18-05 | MAY | -166
name2 | 18-05 | MAY | -86
name3 | 18-05 | MAY | 35
name1 | 18-06 | JUN | -102
name2 | 18-06 | JUN | -32
name3 | 18-06 | JUN | -75
name1 | 18-09 | AVG | -135
name2 | 18-09 | AVG | -52
name3 | 18-09 | AVG | -17
预期输出:
qmonth2 | name1 | name2 | name3
--------+-------+-------+-------
MAY | -166 | -86 | 35
JUN | -102 | -32 | -75
AVG | -135 | -52 | -17
我的完整查询:
SELECT tag1,qmonth2,sum1 FROM crosstab
('SELECT tag1::text,qmonth1,qmonth2::text,sum1::numeric
FROM public."chartdata_chart3"')
AS ct ( "tag1" TEXT,"qmonth2" TEXT,"sum1" NUMERIC);
我收到此错误,无法解决:
ERROR: invalid source data SQL statement
DETAIL: The provided SQL must return 3 columns: rowid, category, and values.
SQL state: 22023
答案 0 :(得分:0)
crosstab()
函数的SQL语句必须返回一个row_name列,一个category列和一个value列。您的情况是qmonth2,tag1和sum1。
这是您的查询,考虑到sum1
是整数,qmonth2
和tag1
是文本:
select *
from crosstab(
'select qmonth2, tag1, sum1
from public."chartdata_chart3"
') AS ct(qmonth2 text, name1 int, name2 int, name3 int;
输出:
qmonth2 | name1 | name2 | name3
---------+-------+-------+-------
MAY | -166 | -86 | 35
JUN | -102 | -32 | -75
AVG | -135 | -52 | -17
有关crosstab
的工作原理的更多信息和示例,请参考manual。
另外,请记住,用引号命名您的列/表会使编写每个SQL查询变得更加复杂,因此您最好不要这样做:)