我想将列转换为行(不使用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。
答案 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