2017-03-16 26 views
0

欲转列成行(不使用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。

回答

1

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

0

使用联合无疑是更好的方法。但是,这也将完成你正在寻找的东西。每个度量都需要一个单独的子查询。

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