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

在BigQuery SQL中如何实现表格的部分转置(列转行)?

在BigQuery中实现宽表转长表的SQL方案

你要实现的是宽表转长表(逆透视/Unpivot)操作,BigQuery里有两种简单直接的方式可以完成:

方式一:用ARRAY+UNNEST手动构造行

这种方式适合列数较少的场景,灵活性高,能自定义更多逻辑:

SELECT
  project_name,
  item.type,
  item.money
FROM
  `your-project.your-dataset.your-table`,
  UNNEST([
    STRUCT('revenues' AS type, revenues AS money),
    STRUCT('costs' AS type, costs AS money),
    STRUCT('margin' AS type, margin AS money)
  ]) AS item
ORDER BY
  project_name, type;

原理是把每一行的revenues、costs、margin三个列,打包成一个包含结构体的数组,再通过UNNEST把数组拆成单独的行,自动对应project_name。

方式二:用BigQuery原生UNPIVOT语法

如果使用的是BigQuery 2.0及以上版本,可以用官方原生的UNPIVOT语法,代码更简洁易读:

SELECT
  project_name,
  type,
  money
FROM
  `your-project.your-dataset.your-table`
UNPIVOT (
  money FOR type IN (revenues, costs, margin)
)
ORDER BY
  project_name, type;

这里UNPIVOT的逻辑很直白:指定money作为值列,type作为类型列,然后列出需要转成行的原列名(revenues、costs、margin),BigQuery会自动完成转置。

两种方式对比

  • 原生UNPIVOT语法更简洁,代码可读性高,适合常规的逆透视需求;
  • ARRAY+UNNEST的方式更灵活,比如可以在构造结构体时添加过滤条件、转换逻辑,或者动态生成列(结合INFORMATION_SCHEMA)。

内容的提问来源于stack exchange,提问作者Giacomo F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:37