Google BigQuery多列Unpivot实现求助(SQL新手)
Google BigQuery多列Unpivot实现方案
你的现有SQL只完成了License列的行转列,但没有关联对应月份的rev数据,所以无法得到包含Rev字段的期望结果。针对你的数据集需求,这里提供两种可行的实现方法:
方法一:使用UNION ALL(适合月份数量少的场景)
这种方式直观易懂,直接将每个月份的License和rev数据单独查询后合并:
SELECT 账户名称, 'License_m1' AS 月份, License_m1 AS License, rev_m1 AS Rev FROM `你的数据集.你的表名` UNION ALL SELECT 账户名称, 'License_m2' AS 月份, License_m2 AS License, rev_m2 AS Rev FROM `你的数据集.你的表名` UNION ALL SELECT 账户名称, 'License_m3' AS 月份, License_m3 AS License, rev_m3 AS Rev FROM `你的数据集.你的表名` ORDER BY 账户名称, 月份
方法二:两次UNPIVOT后关联(适合月份数量多的场景)
如果后续月份数量会增加,这种方式扩展性更好,先分别对License和rev列做行转列,再通过账户名称和月份关联:
WITH license_unpivot AS ( SELECT 账户名称, 月份, License FROM `你的数据集.你的表名` UNPIVOT ( License FOR 月份 IN (License_m1, License_m2, License_m3) ) ), rev_unpivot AS ( SELECT 账户名称, REPLACE(月份, 'rev_', 'License_') AS 月份, Rev FROM `你的数据集.你的表名` UNPIVOT ( Rev FOR 月份 IN (rev_m1, rev_m2, rev_m3) ) ) SELECT lu.账户名称, lu.月份, lu.License, ru.Rev FROM license_unpivot lu JOIN rev_unpivot ru ON lu.账户名称 = ru.账户名称 AND lu.月份 = ru.月份 ORDER BY lu.账户名称, lu.月份
注意事项
- 替换语句中的
你的数据集.你的表名为你实际的BigQuery表路径(格式:项目ID.数据集ID.表名) - 确保字段名和原表完全一致(比如原表用“账户名称”,不要写成英文的Account_Name)
内容的提问来源于stack exchange,提问作者Austinehype
相关产品推荐
相关产品推荐

