You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何添加双列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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:05:28