如何查询查询

时间:2019-03-26 01:57:47

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

如果有col2,则使用查询选择col3 = criteria;如果col3符合条件,则选择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的结果。

2 个答案:

答案 0 :(得分:1)

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

我将您的需求读为:
如果那个,我需要这个,如果那个其他,我需要这个[另一个] ,但是都按顺序。< br /> 通用的解决方法可能类似于:
列出所有首次选择的匹配项,以及用于排序的键列
将所有匹配项附加到第二个选择项上,再加上用于排序的键列
通过排序键对组合列表进行排序
仅输出数据列

作为公式,使用每个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)

答案 1 :(得分:0)

您可以使用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,
  • 否则返回Col3(您可以在此处添加另一个IF以检查Col4 = Y116)