【问题标题】:How to Query a query如何查询查询
【发布时间】:2019-03-26 01:57:47
【问题描述】:

如果col3 = criteria 则使用查询选择col2 或如果col4 满足条件则选择col3

我尝试了多个 OR 语句,尝试添加第二个查询,但似乎没有什么对我有用:

= Query(importrange(B7 ,"Sheet1!A1:G700"),"select Col2 Where Col3 = '"&Y116&"'", 0), 
Query(importrange(B7 ,"Sheet1!A1:G700"),"select Col3 Where Col4 = '"&Y116&"'", 0)

如果col2 中的条件不匹配,我想要col3 的结果。

【问题讨论】:

  • 您是否已经决定使用查询来实现这一点?
  • 使用FILTER 应用您的标准。至少提供数据样本和所需结果。
  • 我不反对使用 FILTER,只是对它不太熟悉。我会检查的。谢谢你的想法
  • 我实际上曾考虑过这样做,但我每天可能要从多达 8 个不同的电子表格中提取数据。

标签: google-apps-script google-sheets google-sheets-query


【解决方案1】:

Google Visualization API 查询语言不允许连接,因此您必须执行多个查询。但有时非查询公式不是一种选择——它们不提供查询的灵活性和强大功能。

   我将您的需求解读为:
我需要 this if that, [inclusive] 或 this other if that other,但一切都井井有条。 通用的解决方法可能类似于:
列出第一个选择的所有匹配项,以及一个用于排序的键列
附加第二个选择的所有匹配项,以及一个用于排序的键列
通过排序键对组合列表进行排序
只输出数据列

作为一个公式,使用每个 WHERE 命中的行作为排序键:

=ARRAY_CONSTRAIN(
  SORT({
    QUERY({sourceRange,ARRAYFORMULA(ROW(sourceRange))},
      "select Col2, Col5 where Col3 = 'that' ",0);
    QUERY({sourceRange,ARRAYFORMULA(ROW(sourceRange))},
      "select Col3, Col5 where Col4 like 'that other' ",0)
  },2,TRUE)
,99999,1)

在将其应用于您的公式时,为了清晰起见尝试将其吹灭:

=ARRAY_CONSTRAIN(
    SORT({
        QUERY({
                importrange(B7,"Sheet1!A1:G700"),
                ARRAYFORMULA(ROW(1:700)))
            },
            "select Col2, Col5 where Col3 = '"&Y116&"'",0
        );
        QUERY({
                importrange(B7,"Sheet1!A1:G700"),
                ARRAYFORMULA(ROW(1:700)))
            },
            "select Col3, Col5 where Col4 = '"&Y116&"'",0
        );
    },2,TRUE)
,700,1)

最初构造一个数组的形式:

Col2 entry where Col3 matched, row number
Col2 entry where Col3 matched, row number
Col2 entry where Col3 matched, row number
…
Col3 entry where Col4 matched, row number
Col3 entry where Col4 matched, row number
Col3 entry where Col4 matched, row number
…

然后可以按行号排序,升序:SORT( ... ,2,TRUE)
最后剪切键并打印700行1列数据:ARRAY_CONSTRAIN( ... ,700,1)

【讨论】:

  • 我正在尝试根据部件名称获取部件号 col2 或 col3。包含所需信息的电子表格已经进行了一些更改,即:在一些工作表的开头插入了一列,但不是全部。由于这些更改,我的简单选择 where 查询变得不可靠。我曾希望插入 OR 子句可以解决我的问题,但我无法让它为我工作。我希望我想要完成的事情得到更好的说明。感谢我能得到的所有帮助
  • 你有我的遗憾;这是一个可怕的故事。解决问题总是比治疗症状更好。插入缺失的列,即使是空白的。规范您的来源!
  • 我只有对源的查看权限,所以我无法将源的格式设置为相同。
【解决方案2】:

您可能可以使用IF

=ARRAYFORMULA(IF(index(importrange(B7 ,"Sheet1!A1:G700"),0,3)=Y116, 
    index(importrange(B7 ,"Sheet1!A1:G700"),0,2),
    index(importrange(B7 ,"Sheet1!A1:G700"),0,3)
))
  • 如果 Col3 = Y116,则返回 Col2,
  • else return Col3(您可以在此处添加另一个 IF 以检查 Col4=Y116 是否)

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2020-04-19
    • 2017-03-08
    • 2017-03-02
    • 2019-09-22
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多