You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:46:33