在Google Sheets中用QUERY/ARRAYFORMULA合并重复ID与唯一行明细
Google Sheets 数据布局调整方案
假设原始数据位于A1:F11区域(表头行1,数据行2-11),可以通过以下两种公式方案实现需求:
方法一:BYROW + XLOOKUP(简洁易读)
在空白单元格(如H1)输入表头:ID、标题、名称、品种,然后在H2单元格输入以下公式:
=BYROW(UNIQUE(A2:B11), LAMBDA(row, { row[0], row[1], XLOOKUP(1, (A$2:A$11=row[0])*(C$2:C$11="Main")*(D$2:D$11="Name"), E$2:E$11, XLOOKUP(1, (A$2:A$11=row[0])*(C$2:C$11="Sub")*(D$2:D$11="Name"), E$2:E$11)), XLOOKUP(1, (A$2:A$11=row[0])*(C$2:C$11="Main")*(D$2:D$11="Breed"), F$2:F$11&" "&E$2:E$11, XLOOKUP(1, (A$2:A$11=row[0])*(C$2:C$11="Sub")*(D$2:D$11="Breed"), F$2:F$11&" "&E$2:E$11)) }))
公式逻辑:
UNIQUE(A2:B11):提取唯一的ID与标题组合,确保每个ID只输出一行BYROW(..., LAMBDA(row, ...)):对每个唯一ID-标题组合逐行处理- 第一个
XLOOKUP:优先匹配数据类型=Main且类型=Name的记录,返回详情作为「名称」;无匹配时自动切换到数据类型=Sub的对应记录 - 第二个
XLOOKUP:优先匹配数据类型=Main且类型=Breed的记录,将品种类型与详情拼接后作为「品种」;无匹配时切换到数据类型=Sub的对应记录
方法二:纯ARRAYFORMULA实现(批量计算友好)
若习惯使用ARRAYFORMULA,可在H2单元格输入以下公式:
=ARRAYFORMULA( LET( unique_ids, UNIQUE(A2:A11), unique_titles, VLOOKUP(unique_ids, A2:B11, 2, FALSE), names, IFERROR( VLOOKUP(unique_ids&"Main"&"Name", {A2:A11&C2:C11&D2:D11, E2:E11}, 2, FALSE), VLOOKUP(unique_ids&"Sub"&"Name", {A2:A11&C2:C11&D2:D11, E2:E11}, 2, FALSE) ), breeds, IFERROR( VLOOKUP(unique_ids&"Main"&"Breed", {A2:A11&C2:C11&D2:D11, F2:F11&" "&E2:E11}, 2, FALSE), VLOOKUP(unique_ids&"Sub"&"Breed", {A2:A11&C2:C11&D2:D11, F2:F11&" "&E2:E11}, 2, FALSE) ), HSTACK(unique_ids, unique_titles, names, breeds) ) )
公式逻辑:
LET(...):定义变量简化公式结构,提升可读性unique_ids:提取所有唯一IDunique_titles:通过VLOOKUP匹配每个ID对应的标题names:先尝试匹配ID+Main+Name的组合获取名称,失败则切换到ID+Sub+Name组合breeds:先尝试匹配ID+Main+Breed的组合并拼接内容,失败则切换到ID+Sub+Breed组合HSTACK:将各列数据横向拼接成最终目标表格
两种方案均严格遵循需求:优先选用数据类型=Main的记录,无Main时自动降级使用Sub;自动合并Breed类别的品种类型与详情,Name类别直接取详情值。
内容的提问来源于stack exchange,提问作者TMMocha
相关产品推荐
相关产品推荐

