如何添加双列UNIQUE约束且不破坏现有Query查询?
问题原因
你修改UNIQUE范围为T7IG!F:G后,VLOOKUP的查找值是两列的唯一组合数组,但内层QUERY返回的范围首列仅为Col6(即F列),无法匹配多列查找键,导致除首列(对应F列)外,其余列因匹配失败被IFERROR转为空值。
解决方案
方案一:合并列作为匹配键(适配原VLOOKUP逻辑)
将F、G列合并为单个字符串作为唯一匹配键,同时在内层QUERY中同步合并对应列作为匹配范围的首列,确保VLOOKUP能正确匹配多列组合:
=ARRAYFORMULA(QUERY(IFERROR(VLOOKUP( UNIQUE(T7IG!F:F&"|"&T7IG!G:G), // 合并F、G列生成唯一键,用"|"分隔避免组合冲突 QUERY({T7IG!$A:$Q},"select Col6&'|'&Col7, Col1, Col3, Col4, Col6, Col7, Col10, Col11, Col15 WHERE Col10 = 1 Order By Col15 Desc",1), // 首列同步合并F、G,后续保留需要的所有列 {2,3,4,5,6,7,8,9}, // 选择对应返回列:Col1、Col3、Col4、Col6、Col7、Col10、Col11、Col15 FALSE)),"SELECT Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8"))
- 用
&"|"&合并列是为了避免不同F、G组合合并后出现重复值(比如F="AB"+G="C"和F="A"+G="BC")。 - 内层QUERY新增了合并列,后续列顺序对应原需求的输出字段,外层QUERY直接按顺序选择即可。
方案二:直接用FILTER+MATCH取唯一组合(更简洁)
先按Col15降序排序,再通过MATCH筛选出每个F、G组合的第一行(即最新行),最后用QUERY过滤条件并整理列:
=ARRAYFORMULA(QUERY( FILTER(SORT(T7IG!$A:$Q,15,FALSE), // 先按Col15降序,确保每个组合的最新行在最前 MATCH(T7IG!F:F&"|"&T7IG!G:G, UNIQUE(T7IG!F:F&"|"&T7IG!G:G),0)=ROW(T7IG!F:F)-ROW(T7IG!F1)+1 ), "select Col1, Col3, Col4, Col6, Col7, Col10, Col11, Col15 where Col10=1" ))
SORT先按Col15降序,保证每个F、G组合的最新记录排在第一位。MATCH给每个唯一的F、G组合分配序号,只保留序号等于行号的行(即每个组合的第一行)。
内容的提问来源于stack exchange,提问作者Prof Dingledong
相关产品推荐
相关产品推荐

