Google Sheets按C列相同值合并行数据的实现方法
Google Sheets按C列同值合并行方案
问题核心
- 需求:对Google Sheets表格数据,按C列的相同值合并对应行
- 原尝试公式:
=QUERY(A2:I7,"select A,B,Max(C),D,E,F,G,H,I where A is not null group by C,B,A,D,E,F,G,H,I")运行后无法得到正确合并结果 - 预期效果参考:

原公式失效原因
原QUERY公式将SELECT语句中所有非聚合字段全部加入了GROUP BY条件,等同于按全字段分组,只有整行所有列值完全一致时才会触发合并,完全无法实现仅按C列单维度分组的需求;同时如果C列为文本类型,使用Max()聚合也不符合文本类数据的合并逻辑。
可用解决方案
方案1:同组合并非空内容(适配大多数场景)
如果需要将同C值下其他列的非空内容拼接合并,直接在空白单元格输入以下公式即可自动生成带表头的完整合并结果:
=LET( valid_data, FILTER(A2:I, A2:A<>""), group_values, INDEX(valid_data,,3), uniq_groups, UNIQUE(group_values), merge_single_group, LAMBDA(target_group, { BYCOL(FILTER(A2:B, C2:C=target_group), LAMBDA(col, JOIN("、", UNIQUE(FILTER(col, col<>""))))), target_group, BYCOL(FILTER(D2:I, C2:C=target_group), LAMBDA(col, JOIN("、", UNIQUE(FILTER(col, col<>""))))) } ), merged_data, BYROW(uniq_groups, merge_single_group), VSTACK(A1:I1, merged_data) )
使用说明:
- 公式会自动过滤A列空行,以C列不重复值为基准逐行合并
- 同组下同列的非空值会自动去重后拼接,默认分隔符为顿号,需要修改分隔符直接替换公式中
"、"的内容即可,比如替换为","即为逗号分隔 - 公式自动保留原表表头,无需手动调整
方案2:仅去重保留C列首次出现的行
如果不需要拼接内容,仅需要C列重复值保留第一次出现的整行、删除后续重复行,可以使用更轻量化的公式:
=VSTACK(A1:I1, SORTN(FILTER(A2:I,A2:A<>""),9^9,2,3,1))
参数说明:
9^9是Google Sheets中常用的大数写法,代表返回足够覆盖全量数据的行数- 第三个参数
2代表开启按指定列去重、保留首次出现行的模式 - 第四个参数
3代表指定第3列(即C列)为去重基准列 - 第五个参数
1代表保留原数据的排列顺序
原QUERY公式修正
如果一定要使用QUERY实现方案2的去重效果,可以将原公式修改为:
=QUERY(A2:I,"select * where A is not null group by A,B,C,D,E,F,G,H,I order by min(row(A2:A)) label min(row(A2:A)) ''",0)
内容的提问来源于stack exchange,提问作者Code Guy
相关产品推荐
相关产品推荐

