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

BigQuery行转列实现:将多行数据转为单行列分布

在BigQuery中实现多行转单行的行转列处理

针对你描述的scores_table表(包含id、item、score字段,每个id对应3条记录),可以通过窗口函数+条件聚合的方式实现行转列,将每条id的3条记录合并为单条,映射到type1、score1、type2、score2、type3、score3列。

实现SQL

SELECT
  id,
  MAX(CASE WHEN rn = 1 THEN item END) AS type1,
  MAX(CASE WHEN rn = 1 THEN score END) AS score1,
  MAX(CASE WHEN rn = 2 THEN item END) AS type2,
  MAX(CASE WHEN rn = 2 THEN score END) AS score2,
  MAX(CASE WHEN rn = 3 THEN item END) AS type3,
  MAX(CASE WHEN rn = 3 THEN score END) AS score3
FROM (
  SELECT
    id,
    item,
    score,
    -- 按业务规则给每个id下的记录分配行号,确定type1/2/3的对应顺序
    ROW_NUMBER() OVER(PARTITION BY id ORDER BY item) AS rn
  FROM scores_table
)
GROUP BY id

关键说明

  1. 窗口函数ROW_NUMBER():通过PARTITION BY id将数据按id分组,ORDER BY item指定每组内记录的排序规则(你可以根据实际业务需求替换为score或其他字段,确保每条记录对应正确的typeN和scoreN),给每组内的记录分配1-3的行号rn。
  2. 条件聚合:外层查询通过CASE WHEN结合MAX()函数,根据行号rn提取对应位置的item和score值,将多行数据合并为单行的多列。
  3. 空值处理:如果某个id对应的记录不足3条,对应的typeN或scoreN会返回NULL,可以用IFNULL()函数替换为默认值(比如IFNULL(MAX(...), 0)或IFNULL(MAX(...), ''))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:01:02