2013-12-18 54 views
0

我在Amazon RedShift中有几个表格遵循几个维度列和一对度量名称/值列的模式。使用Amazon RedShift/PostgreSQL支持表格

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   

什么是生成查询的良好格局是会执行这个展开?

亚马逊红移是基于ParAccel和支持的PostgreSQL 8.0.2,其不具有crosstabunnestpivotunpivot

+0

你在找什么是Pivot。我正在编辑相应的问题 – Faiz

+0

支持任意组的替代方法在此处描述:http://stackoverflow.com/a/42687221/3019685 – systemjack

回答

3

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