谷歌QUERY函数如何对含重复字符串的多行数据进行分组合并
Google Sheets QUERY结果重复行合并方案
你当前返回重复行的原因是QUERY仅会按规则返回匹配行,本身不支持同分组行的字段聚合合并,可通过唯一值遍历+按列取有效值的逻辑实现需求。
如果你使用的是葡萄牙语区域设置(原公式使用SE作为条件函数、反斜杠作为数组列分隔符),可直接使用以下公式替换原有F2单元格内容:
=ArrayFormula( DEIXAR( origem, TO_TEXT({A3:A\SE(G1:AK1>=B3:B;SE(G1:AK1<=B3:B+C3:C-1;D3:D;"*");"*")}), filtrado, FILTRO(origem, ÍNDICE(origem,,1)<>""), unicos, ÚNICO(ÍNDICE(filtrado,,1)), res, POR_LINHA(unicos, LAMBDA(n, POR_COLUNA(SEQUENCE(COLUNAS(filtrado)), LAMBDA(c, DEIXAR( vals, ÍNDICE(FILTRO(filtrado, ÍNDICE(filtrado,,1)=n),,c), SEERRO(ÍNDICE(vals, CORRESP(FALSO, vals="*", 0)), "*") ) )) )), ORDENAR(res, 1, VERDADEIRO) ) )
如果后续切换为中文区域设置,可使用对应适配版本:
=ArrayFormula( LET( 源数组, TO_TEXT({A3:A,IF(G1:AK1>=B3:B,IF(G1:AK1<=B3:B+C3:C-1,D3:D,"*"),"*")}), 过滤后数组, FILTER(源数组, INDEX(源数组,,1)<>""), 唯一姓名列, UNIQUE(INDEX(过滤后数组,,1)), 结果, BYROW(唯一姓名列, LAMBDA(姓名, BYCOL(SEQUENCE(COLUMNS(过滤后数组)), LAMBDA(列序号, LET( 当前列所有值, INDEX(FILTER(过滤后数组, INDEX(过滤后数组,,1)=姓名),,列序号), IFERROR(INDEX(当前列所有值, MATCH(FALSE, 当前列所有值="*", 0)), "*") ) )) )), SORT(结果, 1, TRUE) ) )
实现逻辑
- 复用你原有生成基础数组的逻辑,先过滤掉首列为空的无效行
- 提取首列所有不重复的分组值作为合并基准
- 遍历每个分组值,筛选出该分组对应的所有行数据
- 对每一列数据优先取首个非
*的有效值,整列全为*时保留* - 最终按首列排序输出,即可得到无重复行的合并结果
内容的提问来源于stack exchange,提问作者Wellington Jesus
相关产品推荐
相关产品推荐

