【问题标题】:Google Sheets Query returning results that don't exist in the source listGoogle 表格查询返回源列表中不存在的结果
【发布时间】:2019-02-18 21:09:56
【问题描述】:

我正在 Google 表格中创建预算跟踪器。我在使用 Google 查询语言返回源数据中不存在的结果时遇到问题

我有一个可以输入支出的 Google 表单,它会在我的 Google 云端硬盘中填充相关的表格。我的主预算跟踪器也位于我的 Google 云端硬盘中。我使用 IMPORTRANGE 将数据从 Responses 电子表格中提取到 Master 中,然后 Query 将其分成工作簿内工作表上的不同“支出”类别(每个月一个)。 2 月工作完美 - 所有支出都已找到并正确汇总,然后为一年中的每个月复制 2 月表,更新公式或查找条款。但是 March 的行为很奇怪——它返回了一个不存在的 March 值——不仅总和值不存在,而且“March”这个词也不存在,所以不应该匹配。我已经调整了代码,尝试刷新并将公式重写到单元格中以强制刷新,从外部电子表格重新导入范围,我尝试了各种括号放置(我不是 SQL 或 Google 查询语言专家,所以有点感觉),因为我认为这与未“整理”的 AND/OR 子句有关,但没有一个甚至产生不同的结果,它总是返回相同的错误值

查询代码如下:

=query(spend, "select sum(B) where H = '"&$H$1&"' and E='Leisure' or E='Tickets' or E='Parking' or E='Other' label sum(B) ''", -1)

'spend' 是包含从 Responses 电子表格导入的数据的范围,其中包括几个表格后完成公式,用一天和一个月的行编码。现在,在 H 中只有编码为“二月”的值 - 没有别的。单元格 H1 包含月份名称(写入,而不是公式)。这个公式在“二月”表中完美运行,如果我在三月表中更新单元格 H1 以读取“二月”,它会显示二月的准确值,但是,如果我在 H1 中输入“三月”,我会得到奇怪的结果

我预计 3 月份的结果为 0 英镑,但我得到的结果是 19.46 英镑。如前所述 - 源列表“花费”仅包含在 H 中编码为二月的值,并且值 £19.46 不会单独出现在列表中(并且在“求和”时似乎不是由任何值产生的)。我对正在发生的事情感到茫然,似乎没有答案可以解决神秘值的出现,所以我希望我不会重复旧的基础 - 如果我是的话,请纠正我,并提前非常感谢任何指导

【问题讨论】:

  • 会的,它包含敏感数据,所以只会更改一些数字和名称。忍受我,我很抱歉
  • 您好,很抱歉花费了这么长时间 - 忙碌了一天!希望您应该能够访问它 - 结构是相同的,但我已经编辑了任何敏感信息 - 如果可以,请告诉我。正如我所说,我仍在学习,所以我确定我错过了一些非常明显的东西,但如果我能看到它,我会被诅咒的。
  • 糟糕,抱歉现在应该可以访问了

标签: google-sheets google-query-language


【解决方案1】:

您选择了19.46,因为即使在 Query 中找不到 H1,Query 也会继续评估 AND 和 OR 语句并总结一堆废话

=IFERROR(IF(QUERY(spend, 
              "select count(H) 
               where H='"&$H$1&"' 
               label count(H)''", 0)>0,
 QUERY(spend, "select sum(B) 
               where (H='"&$H$1&"') 
                 AND (E='Leisure') 
                  OR (E='Tickets') 
                  OR (E='Parking') 
                  OR (E='Other') 
               label sum(B)''", -1), ), )

【讨论】:

  • 啊。感觉很笨!
【解决方案2】:

我想你可能只是想试试这个:

=query(spend, "select sum(B) where H = '"&$H$1&"' AND (E='Leisure' OR E='Tickets' OR E='Parking' OR E='Other') label sum(B) ''", -1)

编辑:这将导致错误,因为它将返回一个空查询,因此请尝试此操作。

=iferror(query(spend, "select sum(B) where H = '"&$H$1&"' AND (E='Leisure' OR E='Tickets' OR E='Parking' OR E='Other') label sum(B) ''", -1),0)

【讨论】:

  • 太棒了 - 谢谢!它就像一个魅力。我想我在没有 iferror 语句的情况下尝试了您的第一个解决方案,并认为这是错误的,因为我得到了错误,所以对它进行了折扣。你生活和学习。非常感谢您的帮助!只是出于兴趣,您知道获得 19.46 的原因是什么吗?好奇!
  • 不确定这是否可行(看起来它对 OP 有效,但我最终测试了它但它没有)我很困惑 xD
  • 它似乎工作,我得到一个 0 值而不是 19.46 或错误。我昨晚在旅途中测试头脑。明天将是大考验日,因为 3 月份的支出开始被正确记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多