转置表redshift

时间:2017-03-16 15:17:37

标签: amazon-redshift

我想将列转换为行(不使用UNION):

|Dimension1 | Measure1 | Measure2 |
-----------------------------------
|     1     |   x1     |  y1      |
|     0     |   x2     |  y2      |

分为:

   | Dimension1 |  Measures |  Values |
   -----------------------------------
   | 1          |  Measure1 |    x1   |
   | 1          |  Measure2 |    y1   |
   | 0          |  Measure1 |    x2   |
   | 0          |  Measure2 |    y2   |

措施的数量是固定的。

我正在使用Amazon Redshift。

2 个答案:

答案 0 :(得分:1)

你需要使用Union。你为什么不想用呢?没有其他办法。

答案 1 :(得分:0)

使用union绝对是更好的方法。但这也将实现您正在寻找的东西。每个度量都需要一个单独的子查询。

SELECT COALESCE(sq1.dimension1, sq2.dimension1) AS dimension1 , COALESCE(first_measure_name, second_measure_name) AS measure , COALESCE(first_measure_value, second_measure_value) AS value FROM ( SELECT dimension1 , 'measure1' AS first_measure_name , measure1 AS first_measure_value FROM table) sq1 FULL OUTER JOIN ( SELECT dimension1 , 'measure2' AS second_measure_name , measure2 AS second_measure_value FROM table) sq2 ON sq1.dimension1 = sq2.dimension1 AND sq1.first_measure_name = sq2.second_measure_name