如何查询查询

问题描述 投票:2回答:2

如果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的结果。

google-apps-script google-sheets google-sheets-query
2个回答
1
投票

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

我把你的需求看作: 我需要这个,如果那个,[包含]或另一个,如果那个,但全部按顺序。 广义的解决方法可能类似于: 列出第一个选择的所有匹配项,以及用于排序的键列 附加第二个选择的所有匹配项,以及用于排序的键列 通过排序键对组合列表进行排序 仅输出数据列

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


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)
© www.soinside.com 2019 - 2024. All rights reserved.