Google Sheets Query возвращает результаты, которых нет в исходном списке - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю трекер бюджета в Google Sheets.У меня возникли проблемы с Google Query Language, который возвращает результаты, которых нет в исходных данных

У меня есть форма Google, в которую можно вводить расходы, которая заполняет соответствующий лист в моем Google Диске.Мой трекер основного бюджета также находится в моем Google Диске.Я использую IMPORTRANGE, чтобы вытащить данные в мастер из электронной таблицы ответов, а затем запрос, чтобы разделить их на различные категории «расходов» на листах в рабочей книге (по одной на каждый месяц).Февраль работал отлично - все расходы были найдены и суммированы правильно, а затем февральский лист был продублирован для каждого месяца года, обновлены формулы или условия поиска.Но март действует странно - он возвращает значение для марта, которого не существует, и не только не существует суммированного значения, но и слова «март» также не существует, поэтому не должно совпадать.Я настроил код, попытался обновить и переписать формулу в ячейку, чтобы принудительно обновить ее, повторно импортировал диапазон из внешней электронной таблицы, я пробовал различные варианты размещения в скобках (я не эксперт по SQL или Google Query Language, поэтомуЯ чувствую себя немного не в своей тарелке), поскольку я думал, что это как-то связано с тем, что предложения AND / OR не «сопоставлены», но ни один из них не дал даже другого результата, всегда возвращается одно и то же ложное значение

Код запроса выглядит следующим образом:

=query(spend, "select sum(B) where H = '"&$H$1&"' and E='Leisure' or E='Tickets' or E='Parking' or E='Other' label sum(B) ''", -1)

'тратить' - это диапазон, содержащий данные, импортированные из электронной таблицы ответов, которая включает в себя несколько формул заполнения форм после кодирования строки с указанием дня и месяца.Прямо сейчас есть только значения, закодированные как «февраль» в H - больше ничего.Ячейка H1 содержит название месяца (записано, а не формула).Эта формула отлично работает на листе «Февраль», и если я обновлю ячейку H1, чтобы прочитать «Февраль» на мартовском листе, она покажет точные значения за февраль, однако, если я введу «Март» в Н1, я получу странный результат

Я ожидаю результат за 0 фунтов стерлингов за март, но вместо этого я получаю значение 19,46 фунтов стерлингов.Как было описано ранее, список источников «тратит» содержит только значения, закодированные как H в феврале, а значение £ 19,46 не фигурирует отдельно в списке (и, по-видимому, не создается никакими значениями при «суммировании»).Я в растерянности относительно того, что происходит, и, похоже, нет ответов на вопрос о появлении таинственных ценностей, поэтому я надеюсь, что я не повторяю старые соображения - пожалуйста, исправьте меня, если я, и большое спасибо заранее за любые указания

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

вы выбрали 19.46, потому что даже если H1 не был найден в Query, Query продолжал оценивать операторы AND и OR и суммировать кучу глупостей

=IFERROR(IF(QUERY(spend, 
              "select count(H) 
               where H='"&$H$1&"' 
               label count(H)''", 0)>0,
 QUERY(spend, "select sum(B) 
               where (H='"&$H$1&"') 
                 AND (E='Leisure') 
                  OR (E='Tickets') 
                  OR (E='Parking') 
                  OR (E='Other') 
               label sum(B)''", -1), ), )
0 голосов
/ 19 февраля 2019

Я думаю, вы можете просто попробовать это:

=query(spend, "select sum(B) where H = '"&$H$1&"' AND (E='Leisure' OR E='Tickets' OR E='Parking' OR E='Other') label sum(B) ''", -1)

РЕДАКТИРОВАТЬ: Это приведет к ошибке, так как он вернет пустой запрос, поэтому попробуйте вместо этого.

=iferror(query(spend, "select sum(B) where H = '"&$H$1&"' AND (E='Leisure' OR E='Tickets' OR E='Parking' OR E='Other') label sum(B) ''", -1),0)
...