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

Big Query中聚合发票编号与金额至单行的实现问题

问题描述

现有数据

budget_idinvoice_numberAprilJuneAugust
00411NULL690NULL
004121820NULLNULL
00413NULLNULL890

期望结果

budget_idinvoice_numberAprilJuneAugust
00411, 12, 131820690890

尝试的SQL(无效果)

SELECT budget_id,
       STRING_AGG(invoice_number, ',') AS invoice number,
       April,
       June,
       August
FROM invoice_table
GROUP BY budget_id,
         April,
         June,
         August

注释掉月份字段时,能正常聚合发票编号,但包含月份字段后仍得到3条独立数据行。需要在合并发票编号的同时保留对应月份的金额,请问在Big Query中是否可以实现该需求?

解决方案

可以实现,问题核心是GROUP BY子句包含了月份字段。原数据中每行的月份字段都是互斥的NULL值,分组时会将这三行判定为不同分组,因此无法合并成一行。

正确的写法是对月份字段使用聚合函数(如MAX()),同一budget_id下每个月份仅存在一个非NULL值,取最大值即可保留有效金额,同时仅按budget_id分组:

SELECT budget_id,
       STRING_AGG(invoice_number, ', ') AS invoice_number,
       MAX(April) AS April,
       MAX(June) AS June,
       MAX(August) AS August
FROM invoice_table
GROUP BY budget_id

关键说明

  • STRING_AGG(invoice_number, ', '):将同一budget_id下的所有发票编号用逗号加空格拼接
  • MAX(月份字段):自动忽略NULL值,保留对应月份的唯一有效金额
  • 仅按budget_id分组,确保同一budget_id的所有数据合并为单行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:03:37