如何按指定列合并行并求和指定列,QUERY函数能否实现?
方案1:调整QUERY写法
QUERY只返回你指定的列是因为SELECT语句中只声明了B、sum(E)、sum(F)三个返回项。你筛选的是同一姓名、同一项目下的行,AVS、Adresse、Projet Films这类属性的取值在符合条件的行里完全一致,直接把这些列加到SELECT中,同时补充到GROUP BY列表里即可,不会影响求和结果。
调整后公式示例(请把列序号替换成你表中对应列的实际序号,示例假设AVS为A列、Adresse为C列、Projet Films为G列):=QUERY(BD!A1:GF6;"SELECT A, B, C, D, G, sum(E), sum(F) where D='Grand Nord' AND B='Robin Decoster' GROUP BY A, B, C, D, G")
注意:所有没有使用sum这类聚合函数的列,都必须全部放到GROUP BY列表中,否则公式会报错。
方案2:BYROW+SUMIFS组合(灵活度更高)
如果你要保留的列多,不想一个个调整QUERY的GROUP BY项,可以用这个方案,先提取符合条件的不重复基础信息,再单独对E、F列求和:
=LET( 筛选范围,BD!A1:GF6, 符合条件行,FILTER(筛选范围,(D:D="Grand Nord")*(B:B="Robin Decoster")), 保留列,UNIQUE(CHOOSECOLS(符合条件行,1,2,3,4,7)), // 括号内填入所有你要保留的非求和列的序号 求和E,BYROW(保留列,LAMBDA(x,SUMIFS(E:E,B:B,INDEX(x,2),D:D,INDEX(x,4)))), 求和F,BYROW(保留列,LAMBDA(x,SUMIFS(F:F,B:B,INDEX(x,2),D:D,INDEX(x,4)))), HSTACK(保留列,求和E,求和F) )
该方案后续调整保留列时,只需要修改CHOOSECOLS内的列序号即可,不用改动其他逻辑。
注意事项
- 两个方案都默认同姓名+同项目的条件下,非求和列的取值唯一,如果存在同一条件下非求和列取值不同的情况,需要先确认你要保留的取值规则再调整逻辑。
- 如果你的表格公式分隔符用的是逗号而非分号,把公式里的分号全部替换为逗号即可。
内容的提问来源于stack exchange,提问作者Robin Erard
相关产品推荐
相关产品推荐

