您好,我已经创建了一个视图,但要旋转它。
旋转前输出:
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
最佳答案
作为参数传递给crosstab()
函数的SQL语句必须返回一个行名称列、一个类别列和一个值列。在你的例子中是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查询变得更加复杂,因此最好不要这样做:)
关于postgresql - postgres交叉表,错误:提供的SQL必须返回3列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52151058/