Как сделать запрос - PullRequest
       16

Как сделать запрос

2 голосов
/ 26 марта 2019

Использование запроса для выбора col2, если col3 = criteria, или выбора col3, если col4 соответствует критериям.

Я пробовал несколько операторов ИЛИ, пытался добавить второй запрос и ничегокажется, работает для меня:

= 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 ]

1 голос
/ 26 марта 2019

Язык запросов API визуализации Google не допускает объединений, поэтому вам обязательно потребуется выполнить несколько запросов.Но формулы, не относящиеся к запросам, иногда не подходят - они не обеспечивают гибкость и мощь запросов.

Я читаю вашу потребность как:
Мне нужно это если что , [включительно] или это другое , если то другое , но все в порядке.
Обобщенный обходной путь может напоминать:
Список всех совпадений дляпервый выбор, плюс ключевой столбец для сортировки
Добавление всех совпадений для второго выбора, плюс ключевой столбец для сортировки
сортировка списка комбинаций по ключу сортировки
Вывод только столбца данных

В качестве формулы, используя в качестве ключа сортировки строку каждого нажатия 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 голосов
/ 26 марта 2019

Вы, вероятно, можете сделать это с помощью 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...