使用Amazon RedShift转动表格

时间:2013-12-18 06:16:09

标签: sql pivot amazon-redshift paraccel

我在Amazon 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        

用于生成执行此展开的查询的好模式是什么?

Amazon RedShift基于ParAccel并支持PostgreSQL 8.0.2,它没有crosstabunnestpivotunpivot

1 个答案:

答案 0 :(得分:6)

您可以为每个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默认值相反。