Dynamic 红移。我们如何(动态地)将表从列转换到行?

Dynamic 红移。我们如何(动态地)将表从列转换到行?,dynamic,pivot-table,multiple-columns,amazon-redshift,transpose,Dynamic,Pivot Table,Multiple Columns,Amazon Redshift,Transpose,我们如何将红移表从列转置到行 例如,如果我们有一个通用(未知)表,如下所示: source table: date id alfa beta gamma ... omega 2018-08-03 1 1 2 3 4 2018-08-03

我们如何将红移表从列转置到行

例如,如果我们有一个通用(未知)表,如下所示:

source table:

date        id      alfa                beta                gamma   ...                 omega
2018-08-03  1       1                   2                   3                           4
2018-08-03  2       4                   3                   2                           1
...
2018-09-04  1       3                   1                   2                           4
...
我们如何才能达到以下结果

transposed table:

date        id      column_name     column_value
2018-08-03  1       alfa            1
2018-08-03  1       beta            2
...
2018-08-03  2       omega           1
...
2018-09-04  1       gamma           2
...
在目标表中,列数(alfa、beta、gamma、…、omega)都是动态的(因此,我们正在寻找一种解决方案,在每个列需要映射时,不需要case,因为我们希望将其应用于几个不同的表)

但我们在所有目标表中都有和date和id字段(或者在所有表中最后都有主键或候选键)

我们的红移版本是:

PostgreSQL 8.0.2,红移1.0.3380


我们如何做到这一点?

您需要将列名硬编码到查询中

CREATE TABLE stack(date TEXT, id BIGINT, alpha INT, beta INT, gamma INT, omega INT);

INSERT INTO STACK VALUES('2018-08-03', 1, 1, 2, 3, 4);
INSERT INTO STACK VALUES('2018-08-03', 2, 4, 3, 2, 1);
INSERT INTO STACK VALUES('2018-08-04', 1, 3, 1, 2, 4);

SELECT
  date,
  id,
  col,
  col_value
FROM
(
SELECT date, id, alpha AS col_value, 'alpha' AS col FROM stack
UNION
SELECT date, id, beta  AS col_value, 'beta'  AS col FROM stack
UNION
SELECT date, id, gamma AS col_value, 'gamma' AS col FROM stack
UNION
SELECT date, id, omega AS col_value, 'omega' AS col FROM stack
) AS data
ORDER BY date, id, col
结果:

2018-08-03  1   alpha   1
2018-08-03  1   beta    2
2018-08-03  1   gamma   3
2018-08-03  1   omega   4
2018-08-03  2   alpha   4
2018-08-03  2   beta    3
2018-08-03  2   gamma   2
2018-08-03  2   omega   1
2018-08-04  1   alpha   3
2018-08-04  1   beta    1
2018-08-04  1   gamma   2
2018-08-04  1   omega   4

我也遇到过同样的问题,只是源数据来自API,最终创建了一个python脚本来透视或转换数据集。哼。也许可以创建一个python函数来创建某种动态查询。但我不知道是否可以使用类似于
select*fromPivot_函数('schema_name','table_name','table_id_column_name')红移UDF无法访问表数据。