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

时间:2018-09-08 10:41:14

标签: sql postgresql unpivot

在PostgreSQL 9.6中,如何从链接下方具有以下结构的表“导入” ...

Structure of 'import' table

创建一个查询/函数,然后将其转置为以下内容:

Structure of expected view

不幸的是,表“ import”没有ID字段。 我尝试将交叉表与tablefunc一起使用,但没有效果。

1 个答案:

答案 0 :(得分:2)

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

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

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);