Google Sheets中如何纵向合并两个QUERY函数的查询结果
纵向合并两个QUERY结果失效的核心原因
之前的拼接操作不生效,本质是以下几个问题:
- 大括号纵向拼接的硬性要求是所有参与拼接的数组列数必须完全一致。给查询套IFERROR/IFNA时如果没有指定错误时的返回值,函数默认返回空值(0行0列),和正常返回的7列结果列数不匹配,会直接触发数组拼接错误。
- IFNA只能捕获#N/A类错误,当出现列数不匹配引发的#VALUE!错误时,IFNA不会生效,错误会直接透传。
- 原查询1、查询2在没有匹配到符合条件的行时,QUERY函数会直接返回#N/A错误,没有做固定列数的空值占位,只要其中一个查询无结果,整个拼接就会失败。
正确实现方法
核心思路是先给每个查询做错误兜底,保证无论查询是否有返回结果,都固定输出7列的数组,再做纵向拼接,最后筛掉兜底用的空行即可。
完整可直接使用的公式如下:
=ARRAYFORMULA( QUERY( { IFERROR( QUERY( IF(Presentations!G3:G = "Conference presentation", {Presentations!A3:A, Presentations!B3:B, Presentations!C3:C, Presentations!S3:S, Presentations!V3:V, Presentations!K3:K&". "&Presentations!L3:L, Presentations!T3:T}, {Presentations!A3:A, Presentations!B3:B, Presentations!C3:C, Presentations!S3:S, Presentations!V3:V, Presentations!P3:P&". "&Presentations!Q3:Q, Presentations!T3:T} ), "select Col1, Col2, Col3, Col4, Col5, Col6, Col7 where Col4 is not null",0 ), {"","","","","","",""} ); IFERROR( QUERY( {'Doc Engagement'!A3:A, 'Doc Engagement'!B3:B, 'Doc Engagement'!C3:C, 'Doc Engagement'!S3:S, 'Doc Engagement'!I3:I, 'Doc Engagement'!G3:G&": "&'Doc Engagement'!H3:H, 'Doc Engagement'!T3:T}, "select Col1, Col2, Col3, Col4, Col5, Col6, Col7 where Col6 is not null",0 ), {"","","","","","",""} ) }, "select * where Col1 is not null",0 ) )
注意事项
- 公式里的
{"","","","","","",""}是1行7列的空占位数组,列数和两个查询的返回列数完全一致,不会触发列数不匹配错误。 - 最外层的QUERY用来筛掉两个查询无结果时生成的空占位行,可以根据实际业务调整筛选条件,比如保留Col4非空或者Col6非空的行。
- 不需要额外给每个子查询嵌套ARRAYFORMULA,最外层的ARRAYFORMULA会自动适配整个数组的逐行计算。
内容的提问来源于stack exchange,提问作者psych0groov3
相关产品推荐
相关产品推荐

