【问题标题】:Is there an alternative to a nested query call in Google Sheets?Google 表格中是否有嵌套查询调用的替代方法?
【发布时间】:2021-04-24 13:07:10
【问题描述】:

我已经编写了这些查询,但我想我可能在 Google 表格中发现了一个错误:

=IFERROR(QUERY(QUERY({Sheet1!$A$2:$E},"select Col2, sum(Col4) where Col5 is null group by Col2 label sum(Col4) ''"), "Select Col1"))

另一个是相同的,不同的列:

=IFERROR(QUERY(QUERY({Sheet1!$A$2:$E},"select sum(Col4) where Col5 is null group by Col2 label sum(Col4) ''"), "Select Col1"))

删除 E 列中的 X 会显示 F:G 中的查询数据,但删除 X 会保留其中一个值。这是live example

如果我移动列或删除 G 列或删除标签 hack,该错误就会消失。

不幸的是,虽然这个例子看起来很做作,但它来自一个更复杂的电子表格,我无法轻易修改,所以我坚持使用列/行排列。

假设这是 Google 表格团队应该修复的错误(可能是由 label sum(Col4) '' hack 引起的),是否有其他方法可以做到这一点?

  • 给定一个包含多个产品、数量和发票状态的表
    • 获取尚未开票的行(这可能是 0,因为它们都已开票,也可能是 0,因为没有产品,因此 IFERROR 调用和 label sum(Col4) '' hack)
      • 将产品数组(来自过滤的行)放在特定的单元格中(因此是第二个查询调用)
      • 对数量做同样的事情

根据 MattKing 和 player0 的建议进行编辑

这是未开具发票时的预期状态(请参阅live example

但是,当我为所有项目开具发票时,会发生这种情况(有时,因为我注意到错误来来去去):

请注意,单元格 F7 中的值是 QUERY 剩余的文字“p3”。这不应该存在,这让我认为这是一个 Google 表格错误

【问题讨论】:

  • 您可能需要使用查询函数的第三个 [可选] 参数。如果不这样做,该函数将“猜测”哪些行是“标题”行并且应该被排除在外,哪些是真正的值行,应该包括在内。由于您有一个嵌套查询,因此您的目标并不完全清楚,但请尝试对 query() 的第三个参数使用 0。
  • 请在您的示例电子表格中显示您手动输入的示例数据的预期结果。
  • @MattKing 我在两者中都将其更改为 -1(0 会在下面添加一行),这似乎可以解决它????
  • @MattKing 我试过你的建议来解决我的尝试,但不是你的 ????查看 OP 中的更新
  • 抱歉,我无法从截图中看到发生了什么。在这里看到它的帮助。 docs.google.com/spreadsheets/d/…

标签: arrays google-sheets sum google-sheets-formula google-query-language


【解决方案1】:

尝试:

=IFERROR(QUERY(QUERY({Sheet1!A2:E},
 "select Col2,sum(Col4) where Col5 is not null group by Col2"), 
 "offset 1", 0))

更新:

顶部的空行是包含空白行的残留物。反击你可以使用:

=IFERROR(QUERY(QUERY({Sheet1!$A$2:$E},
 "select Col2, sum(Col4) where Col5 is null and Col4 is not null group by Col2"), 
 "select Col1 offset 1", 0))

甚至:

=IFERROR(QUERY(QUERY({Sheet1!$A$2:$E},
 "select Col2, sum(Col4) where Col5 is null and Col4 is not null group by Col2 label sum(Col4)''"), 
 "select Col1", 0))

或更短:

=IFNA(INDEX(QUERY({Sheet1!A$2:E},
 "select Col2,sum(Col4) where Col5 is null and Col4 is not null group by Col2 label sum(Col4)''"),,1))

=IFNA(QUERY({Sheet1!A$2:E},
 "select sum(Col4) where Col5 is null and Col4 is not null group by Col2 label sum(Col4)''"))

【讨论】:

  • 谢谢,这几乎可行。但它在顶部留下了一个空行。
【解决方案2】:

where Col5 is null

您要求query() 仅包含 E 列为空白的行中的数据。所有数据行都在 E 列中包含一个值,因此结果将仅包含来自空白行的数据。也许你在追where Col5 is NOT null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2020-05-21
    • 2015-02-05
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多