如何进行全外连接?

How to do a full outer join?

我正在尝试在两个不同的 sheet 中对以下数据进行完全连接。

Sheet 9:

Product ID Name Quantity
1 addi 55
2 fadi 66
3 sadi 33

Sheet10

Product ID Variants Model
1 xyz 2000
2 differ 2001
3 saddd 336
4 fsdfe 2005

期望的输出 sheet :

Product ID Name Quantity Variants Model
1 addi 55 xyz 2000
2 fadi 66 differ 2001
3 sadi 33 saddd 336
4 fsdfe 2005

如果我们有更多列要加入,如 sheet 1 和 sheet 2 中还有两列,如年份、产品标签等,也请分享,那么我应该在你提出的解决方案中更改什么

我正在使用这个公式,但它没有返回所需的结果

=ARRAYFORMULA({QUERY(SORT(UNIQUE({Sheet9!A1:D; Sheet10!A1:D})), "where Col1 is not null"),IFERROR(VLOOKUP(TRANSPOSE(QUERY(TRANSPOSE(QUERY(SORT(UNIQUE({Sheet9!A1:D; Sheet10!A1:D})), "where Col1 is not null")),,999^99)), TRANSPOSE(QUERY(TRANSPOSE(Sheet9!A1:D),,999^99)), Sheet9!C1:C}, 2, 0),""),IFERROR(VLOOKUP(TRANSPOSE(QUERY(TRANSPOSE(QUERY(SORT(UNIQUE({Sheet9!A1:D; Sheet10!A1:D})), "where Col1 is not null")),,999^99)), {TRANSPOSE(QUERY(TRANSPOSE(Sheet10!A1:D),,999^99)), Sheet10!C1:C}, 2, 0),"")}})

已编辑以考虑动态行匹配。

See this spreadsheet 进行说明,但总的来说您的设置存在问题,但我会将您的问题分为两个步骤。

获取不同的 ID 列表

你可以用这个公式得到:

=unique(transpose(split(textjoin(",",true,
    iferror(INdex(Sheet2!$A:$Z,0,MATCH(A1,Sheet2!1:1,0)),""),
    iferror(INdex(Sheet1!$A:$Z,0,MATCH(A1,Sheet1!1:1,0)),"")),",")))

其余 Headers

那么对于每个 header,它们是否总是只在 1 个或 2 个(不是两者)中?假设是这样,这应该适用于每个额外的列。如果两个值曾经存在于两个工作表中,则将它们连接到同一列中。

=filter( 
 iferror(VLOOKUP($A:$A,Sheet1!$A:$Z,match(E,Sheet1!1:1,0),false),"")
 &iferror(VLOOKUP($A:$A,Sheet2!$A:$Z,match(E,Sheet2!1:1,0),false),"")
   ,$A:$A<>"")

可能有一种方法可以使用 join 函数更优雅地完成此操作(如果有人发布了一个答案,我会投票支持)。