Гугл листы "array_agg" ... или эквивалент? (объединить агрегацию) - PullRequest
1 голос
/ 18 января 2020

В настоящее время у меня есть это

=QUERY(
  QUERY(
    'Raw Paste'!C2:E, "select C, count(C) where C is not null group by C order by C label count(C) ''"
  ), "WHERE Col2 >= 2")

Второй QUERY(), поэтому я могу фильтровать агрегатную функцию как SQL HAVING функция ...

Это будет сделать это:

enter image description here

Что я хочу сделать, хотя это рядом с подсчетом, я хочу 3-й столбец, который объединяет номера счетов, которые включены в совокупность.

Это было бы тривиально с ARRAY_AGG(C), но листы Google не такие уж причудливые.

Я подумал, может быть, как-то использовать INDEX / MATCH, но не знаю. Мне нужно объединить строки, когда элемент появляется более одного раза.

C    D
111  PPP
222  OOO
222  QQQ

Требуемый вывод:

C    D
222  OOO, QQQ

Ответы [ 2 ]

3 голосов
/ 18 января 2020

Это можно сделать с помощью FILTER и JOIN

=IFERROR(JOIN(", ", FILTER(D2:D, C2:C = A3)))

FILTER будет искать в C2:C для A2 и возвращать значения из D2:D, которые передаются до JOIN

0 голосов
/ 18 января 2020
=ARRAYFORMULA(REGEXREPLACE(TRIM({QUERY(QUERY(C:D, 
 "select C,count(C) where C is not null group by C pivot D", 0), "select Col1 offset 1", 0),
 TRANSPOSE(QUERY(TRANSPOSE(IF(ISNUMBER(QUERY(QUERY(C:D, 
 "select count(C) where C is not null group by C pivot D", 0), "offset 1", 0)), 
 QUERY(QUERY(C:D, 
 "select count(C) where C is not null group by C pivot D", 0), "limit 0", 1)&",", ))
 ,,999^99))}), ",$", ))

0

...