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

如何用Google Query结合IF与SUM将多行数据合并为单行

问题描述

我们从项目管理软件中导出了如下原始工时数据:

MonthProjectBillableTime
Jan 2022Project 1Yes100
Jan 2022Project 1No10
Feb 2022Project 1Yes80
Feb 2022Project 1No30
Jan 2022Project 2Yes60
Jan 2022Project 2No5
Feb 2022Project 2Yes90
Feb 2022Project 2No15

需要将其转换为以下汇总格式:

MonthProjectBillable TimeNon-Billable TimeTotal Time
Jan 2022Project 110010110
Feb 2022Project 18030110
Jan 2022Project 260565
Feb 2022Project 29015105

已将原始数据导入Google Sheet,尝试使用Google Query初始公式:
=QUERY(dataRange,"SELECT Month,Project,SUM(Time) GROUP BY Month, Project")
但无法实现区分计费/非计费工时并将求和结果放在同一行,现咨询:

  1. 是否可通过Google Query实现该需求?
  2. 若可行,正确的语法是什么?
  3. 若不可行,应采用何种替代方法?

解决方案
  1. 可以通过Google Query实现该需求,核心是利用条件求和(SUM(CASE WHEN...))语法拆分计费与非计费工时。

  2. 正确的Google Query公式:
    假设原始数据表头在A1单元格,数据范围为A1:D9,公式如下:

=QUERY(A1:D9, "SELECT A,B,SUM(CASE WHEN C='Yes' THEN D ELSE 0 END),SUM(CASE WHEN C='No' THEN D ELSE 0 END),SUM(D) WHERE A IS NOT NULL GROUP BY A,B LABEL SUM(CASE WHEN C='Yes' THEN D ELSE 0 END) 'Billable Time', SUM(CASE WHEN C='No' THEN D ELSE 0 END) 'Non-Billable Time', SUM(D) 'Total Time'")

如果使用命名范围dataRange(包含表头),公式可改为:

=QUERY(dataRange, "SELECT Col1,Col2,SUM(CASE WHEN Col3='Yes' THEN Col4 ELSE 0 END),SUM(CASE WHEN Col3='No' THEN Col4 ELSE 0 END),SUM(Col4) WHERE Col1 IS NOT NULL GROUP BY Col1,Col2 LABEL SUM(CASE WHEN Col3='Yes' THEN Col4 ELSE 0 END) 'Billable Time', SUM(CASE WHEN Col3='No' THEN Col4 ELSE 0 END) 'Non-Billable Time', SUM(Col4) 'Total Time'")
  • 逻辑说明:
    • 用CASE WHEN判断Billable列的值,分别对Time列进行条件求和,得到计费/非计费工时
    • GROUP BY Col1,Col2(即Month和Project)将同一月份同一项目的记录合并到一行
    • LABEL子句用于自定义输出列的表头,匹配目标格式
  1. 替代方法(若Query语法不易维护):
  • 使用数据透视表:
    1. 选中原始数据区域,点击菜单栏「数据」→「数据透视表」
    2. 行:添加「Month」和「Project」
    3. 值:添加三次「Time」,分别设置:
      • 第一个值字段:筛选「Billable=Yes」,自定义名称为「Billable Time」
      • 第二个值字段:筛选「Billable=No」,自定义名称为「Non-Billable Time」
      • 第三个值字段:直接求和,自定义名称为「Total Time」
  • 使用数组公式组合SUMIFS:
    先提取唯一的Month+Project组合,再用SUMIFS分别计算各部分工时:
    =ARRAYFORMULA(
      LET(
        uniquePairs, UNIQUE(A2:A9&B2:B9),
        months, INDEX(SPLIT(uniquePairs, CHAR(9))),
        projects, INDEX(SPLIT(uniquePairs, CHAR(9)),,2),
        billable, SUMIFS(D2:D9,A2:A9,months,B2:B9,projects,C2:C9,"Yes"),
        nonBillable, SUMIFS(D2:D9,A2:A9,months,B2:B9,projects,C2:C9,"No"),
        total, billable+nonBillable,
        HSTACK(months, projects, billable, nonBillable, total)
      )
    )
    
    注:公式中CHAR(9)是制表符,用于拆分组合后的字符串,确保Month和Project能正确分离。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:45