我在 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,该版本没有crosstab
, unnest
, pivot
or unpivot
.
您可以只为每个 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 默认值相反。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)