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);
如何在 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);