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

BigQuery按ID实现行转列 聚合多行Area、Amount为多列

BigQuery 固定组数行转列实现方法

直接用分组+条件聚合的方式实现,不需要复杂的PIVOT语法,逻辑简单执行效率高,完全匹配需求:

  • 先通过窗口函数给同一ID下的每条Area、Amount记录打上1-4的顺序编号
  • 按ID分组,用条件聚合提取对应编号的Area、Amount值,不足4组的字段自动填充NULL

可直接运行的参考代码:

WITH ranked_records AS (
  SELECT
    ID,
    Area,
    Amount,
    -- 如需固定排序规则,可将ORDER BY后内容替换为排序字段,例如 ORDER BY Area ASC
    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) AS seq
  FROM `替换为你的项目.数据集.输入表名`
)
SELECT
  ID,
  MAX(IF(seq = 1, Area, NULL)) AS Area1,
  MAX(IF(seq = 1, Amount, NULL)) AS Amount1,
  MAX(IF(seq = 2, Area, NULL)) AS Area2,
  MAX(IF(seq = 2, Amount, NULL)) AS Amount2,
  MAX(IF(seq = 3, Area, NULL)) AS Area3,
  MAX(IF(seq = 3, Amount, NULL)) AS Amount3,
  MAX(IF(seq = 4, Area, NULL)) AS Area4,
  MAX(IF(seq = 4, Amount, NULL)) AS Amount4
FROM ranked_records
GROUP BY ID

注意事项

  • 代码中ORDER BY (SELECT NULL)代表不指定额外排序规则,按数据在表中的原始读取顺序生成序号。如果需要按Area值、Amount值固定排列顺序,直接修改ORDER BY后的字段即可。
  • 需求中明确单个ID最多关联4组数据,因此代码只处理seq=1到4的记录,超出4条的冗余数据会自动被忽略;不足4条的ID对应缺失位置的字段会自动返回NULL,无需额外写补全逻辑。
  • 用给定的样例数据运行上述代码,输出结构和字段值完全匹配给出的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:54:15