Snowflake SQL如何不新建表实现横向表转指定格式纵向表
解决方案
你当前已经通过UNPIVOT完成了「多列指标转成行」的步骤,只需要在其外层嵌套一层PIVOT,把category字段的不同值转为列即可实现需求,单条SQL实现如下:
SELECT * FROM ( -- 原有UNPIVOT逻辑,把Metric多列转成行 SELECT CATEGORY, METRICS, DATA FROM my_table UNPIVOT ( DATA FOR Metrics IN (Metric1, Metric2, Metric3) ) ) UNPIVOT_RESULT -- 新增PIVOT逻辑,把category值转为列 PIVOT ( MAX(DATA) -- 同一(Metrics,CATEGORY)组合只有唯一值,用MAX/MIN/AVG均可 FOR CATEGORY IN ('First' AS First, 'Second' AS Second) ) ORDER BY METRICS;
如果你的category值是动态变化的,不想硬编码First、Second,可以使用Snowflake原生支持的动态PIVOT语法:
SELECT * FROM ( SELECT CATEGORY, METRICS, DATA FROM my_table UNPIVOT ( DATA FOR Metrics IN (Metric1, Metric2, Metric3) ) ) UNPIVOT_RESULT PIVOT ( MAX(DATA) FOR CATEGORY IN (ANY) ) ORDER BY METRICS;
后续新增其他category值时不需要修改SQL,会自动生成对应列。
内容的提问来源于stack exchange,提问作者Troy Bear
相关产品推荐
相关产品推荐

