如果您希望能够旋转到任意数量的组,您可以将这些组组合成一个 JSON 字符串,然后使用以下命令提取您感兴趣的组:Redshift JSON 函数。您可能不想对非常大的数据集执行此操作。
这是基于示例数据的基本思想上面链接的问题:
select DimensionA, DimensionB,
json_extract_path_text(json_pivot, 'm1') m1,
json_extract_path_text(json_pivot, 'm2') m2
from (
select DimensionA, DimensionB,
'{' || listagg(quote_ident(MetricName) || ':' || quote_ident(MetricValue), ',')
within group (order by MetricName) || '}' as json_pivot
from to_pivot
group by DimensionA, DimensionB
)
实际上,您不会希望这样运行它。内部选择是您用来生成“透视”表的内容,外部选择显示如何引用特定的组值。
这不考虑相同暗淡组合的重复组记录,如下所示:
DimensionA DimensionB MetricName MetricValue
---------- ---------- ---------- -----------
dimA1 dimB2 m1 v13
dimA1 dimB2 m1 v23
如果数据中有这种可能性,那么您将必须弄清楚如何处理它。我不确定它的实施效果如何。我的猜测是第一个出现的情况将被提取。
这可能可以通过组合来完成LISTAGG and REGEXP_SUBSTR以及使用两个自定义分隔符。
Using varchar(max)
为了JSON 列类型将提供 65535 字节,这应该可以容纳几千个类别。
解释这里略有不同.