PostgreSQL 9.6 交叉表,创建数据透视表

PostgreSQL 9.6 crosstab, create pivot

如何在 PostgreSQL 9.6 中,从具有以下结构的 table "import" link...

创建一个查询/函数,然后将其转换为如下形式:

很遗憾,table 'import' 没有 ID 字段。 我尝试将交叉表与 tablefunc 一起使用,但没有效果。

您正在寻找交叉表或数据透视表的对立面:您正在寻找非数据透视表

在标准 SQL 中,您将使用 UNION ALL 执行此操作(除非 DBMS 支持 Postgres 不支持的 unpivot 运算符):

select dlimportdate, 1 as colno, col1 as value
from the_table
union all
select dlimportdate, 2, col1
from the_table
union all
...

但是在 Postgres 中有一种更短的方法可以做到这一点。创建一个列数组,然后使用 unnest 将它们转换为行:

select dlimportdate, t.colno, t.value
from the_table
  cross join unnest(array[col1, col2, col3, ...]) with ordinality as t(value, colno);