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

如何在QUERY()函数结果中按ORDER NO分组添加小计?

Google Sheets 按ORDER NO分组并添加QTY小计

问题描述

使用公式 =QUERY(SIPARISLER; "select C, D, E, F where G = 'KESİN' order by C DESC"; 1) 获取了包含FIRMA、ORNER NO、BCE NO、QTY字段的表格数据,需要按ORDER NO(对应原数据的ORNER NO)分组,在每组数据后添加该组的QTY小计,生成指定格式的输出表格。

输入数据

+ABCD
1FIRMAORNER NOBCE NOQTY
2SLP23156130-12950
3SLP23156130-30230
4SLP23178430-116100
5OFM31230-1233
6DELTA23339160-1206

期望输出

+ABCD
1FIRMAORDER NOBCE NOQTY
2SLP23156130-12950
3SLP23156130-30230
4SUBTOTAL80
5SLP23178430-116100
6SUBTOTAL100
7OFM31230-1233
8SUBTOTAL3
9DELTA23339160-1206
10SUBTOTAL6

解决方案

直接在单元格中输入以下公式即可实现需求:

=ARRAYFORMULA(
  LET(
    data, QUERY(SIPARISLER; "select C, D, E, F where G = 'KESİN' order by C DESC"; 1);
    headers, INDEX(data; 1; );
    rows, INDEX(data; 2:ROWS(data); );
    orderNos, INDEX(rows; ; 2);
    uniqueOrders, UNIQUE(orderNos);
    result, REDUCE(headers; uniqueOrders; LAMBDA(acc; order;
      LET(
        group, FILTER(rows; orderNos = order);
        subtotal, {"SUBTOTAL"; ""; ""; SUM(INDEX(group; ; 4))};
        VSTACK(acc; group; subtotal)
      )
    ));
    result
  )
)

公式说明

  1. LET函数:定义变量简化结构,避免重复计算
    • data:存储原始QUERY返回的完整数据(含表头)
    • headers:提取表头行
    • rows:提取除表头外的所有数据行
    • orderNos:提取所有用于分组的ORNER NO字段值
    • uniqueOrders:获取不重复的ORNER NO列表
  2. REDUCE函数:遍历每个唯一分组值,逐步构建结果
    • 用FILTER筛选当前分组的所有数据行
    • 计算该组QTY总和,生成小计行
    • 用VSTACK将累计结果、当前分组数据、小计行堆叠
  3. 最终输出:result变量存储带小计的完整表格

注意事项

  • 需使用支持REDUCE、LAMBDA、VSTACK的新版Google Sheets
  • 若原始QUERY的列对应关系变更,需调整INDEX中的列索引(如INDEX(rows; ; 2)对应ORNER NO列,INDEX(group; ; 4)对应QTY列)

内容的提问来源于stack exchange,提问作者Gökhan Ton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:28:24