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

Google Sheets:能否将QUERY多列结果作为DAYS函数的参数?

简化Google Sheets休假天数计算公式

问题背景

我当前用以下公式计算指定人员在特定时间段内的休假总天数:

=SUM(
  ARRAYFORMULA(
    DAYS(
      QUERY($A$2:$D$100, "SELECT C WHERE A='Dave' AND B >= date '2024-01-01' AND C <= date '2024-01-31'"), 
      QUERY($A$2:$D$100, "SELECT B WHERE A='Dave' AND B >= date '2024-01-01' AND C <= date '2024-01-31'")
    )
  )
)

这个公式需要重复调用两次QUERY,我想简化成仅调用一次QUERY,比如通过DAYS(SOMEFUNCTION(QUERY(SELECT C,B)))的形式,直接把QUERY返回的两列结果分别传入DAYS的两个参数。之前试过TRANSPOSE和ARRAYFORMULA,但没实现预期效果。

解决方案

方法1:用INDEX提取QUERY返回的列

通过INDEX函数分别提取QUERY返回的两列数据,配合ARRAYFORMULA批量计算天数差后求和:

=SUM(ARRAYFORMULA(DAYS(INDEX(QUERY($A$2:$D$100, "SELECT C,B WHERE A='Dave' AND B >= date '2024-01-01' AND C <= date '2024-01-31'"),,1), INDEX(QUERY($A$2:$D$100, "SELECT C,B WHERE A='Dave' AND B >= date '2024-01-01' AND C <= date '2024-01-31'"),,2))))

方法2:用LET函数复用QUERY结果(更简洁)

如果你的Google Sheets支持LET函数,可将QUERY结果存为临时变量,避免重复执行查询,公式可读性更强:

=LET(
  vacation_data, QUERY($A$2:$D$100, "SELECT C,B WHERE A='Dave' AND B >= date '2024-01-01' AND C <= date '2024-01-31'"),
  SUM(ARRAYFORMULA(DAYS(INDEX(vacation_data,,1), INDEX(vacation_data,,2))))
)

原理说明

  • 单次QUERY返回**结束日期(C列)和开始日期(B列)**两列数据
  • INDEX(vacation_data,,1)提取第一列(结束日期),INDEX(vacation_data,,2)提取第二列(开始日期)
  • ARRAYFORMULA让DAYS函数对每一行的日期对自动计算天数差
  • 最后用SUM求和得到总休假天数

之前用TRANSPOSE失败,是因为TRANSPOSE会将列转为行,而DAYS需要两个同长度的列数组作为参数,转置后的数据结构不匹配,无法正确批量计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:12:38