BigQuery如何使用pivot/unpivot实现列转行、行转列转换?
实现方案
你需要先执行UNPIVOT将原有指标列转为行,再执行PIVOT将SKU值转为列,两步即可完成转换,这是BigQuery下最直观的实现方式。
报错原因说明
你原有代码的报错来自两个问题:
- 仅查询了
ds_hrc_shm单个指标列,未包含其他需要转置的指标列 - PIVOT的IN子句不需要加方括号,直接用单引号包裹SKU取值即可
完整实现代码
SELECT * FROM ( -- 选取所有需要用到的原始列 SELECT SKU, `Ds Hrc Shm`, `Ds Orc Cwp`, `Ds Orc Mwp` FROM `manual_input.sku_translations` ) -- 第一步:UNPIVOT将指标列转成行维度 UNPIVOT ( metric_value FOR metric_name IN ( `Ds Hrc Shm`, `Ds Orc Cwp`, `Ds Orc Mwp` ) ) -- 第二步:PIVOT将SKU值转成列维度 PIVOT ( SUM(metric_value) FOR SKU IN ( 'DB-MIX-HTS', 'DB-ORC-TUS' ) )
扩展说明
如果SKU的取值不固定,你可以使用BigQuery动态SQL自动生成IN子句的取值列表,避免手动列全所有SKU值。
内容的提问来源于stack exchange,提问作者Issada Intakaew
相关产品推荐
相关产品推荐

