首页 > 解决方案 > 如何查询查询

问题描述

使用查询来选择一个col2ifcol3 = criteria或 select col3if 是否col4符合条件。

我尝试了多个 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)

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

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-query

解决方案


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)


推荐阅读