小编典典

使用Amazon RedShift旋转表格

sql

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

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

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


阅读 174

收藏
2021-03-23

共1个答案

小编典典

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

2021-03-23