我在亚马逊RedShift中有几个表,它们遵循几个维度列和一对指标名称/值列的模式。
DimensionA DimensionB MetricName MetricValue
---------- ---------- ---------- -----------
dimA1 dimB1 m1 v11
dimA1 dimB2 m1 v12
dimA1 dimB2 m2 v21
dimA2 dimB2 m1 v13
dimA3 dimB1 m2 v22 我正在寻找一种很好的方法来将数据展开/透视为每个唯一维度集一行的形式,例如:
DimensionA DimensionB m1 m2
---------- ---------- --- ---
dimA1 dimB1 v11
dimA1 dimB2 v12 v21
dimA2 dimB2 v13
dimA3 dimB1 v22 什么是生成执行解开操作的查询的好模式?
亚马逊RedShift基于ParAccel,支持没有crosstab、unnest、pivot或unpivot的PostgreSQL 8.0.2。
发布于 2013-12-19 00:14:21
您可以只为每个MetricName创建一条CASE语句,但您还必须使用聚合来使GROUP BY工作。
SELECT dimension_a
,dimension_b
,MAX(CASE WHEN metric_name = 'm1' THEN metric_value ELSE NULL END) m1
,MAX(CASE WHEN metric_name = 'm2' THEN metric_value ELSE NULL END) m2
FROM my_table
GROUP BY dimension_a
,dimension_b
;值得注意的是,Redshift对象名称从不区分大小写,但列内容始终区分大小写,这与SQL Server默认值相反。
https://stackoverflow.com/questions/20650918
复制相似问题