Google Sheet - 动态合并两个表,包括重复项

Google Sheet - Combine two tables dynamically including duplicates

在 google sheet 中,我正在尝试扩展诸如查询或数组之类的东西,它们可以:

Here is an example google sheet (EDITABLE - feel free) 您可以在其中看到两个源 table(Table 1 和 2),以及所需的输出 table(目前手动完成)。在 sheet 中向下滚动以使用基于公式的输出。


这里有一个简单的总结和例子:

想法是为每个人-水果设置多行的一组“说明”。

这个公式可以得到一个水果的所有详细信息(没有人的名字):

=FILTER(query($E:$G, "select E,F,G"),$E:$E=""&$B&"")

(where B3 = "Apple")

但我不确定是否有某种方法可以将这些与名称结合起来并使其动态化 - 所以如果添加了更多的人或水果,输出列表将完全更新。 例如:

={person-fruit 1;person-fruit 2;person-fruit N}

我完全可以使用中介 table 或其他东西来获得结果。

我复制了一份包含解决方案的选项卡(公式以黄色突出显示)。该方法基本上是将文本拼接成 CSV 类型格式。我用“;”分隔行,用“,”分隔列。最后一步是用split/array公式解析出来。

正在创建 CSV 类型的字符串:

=arrayformula(
TEXTJOIN(",",true,
    Query(
           {arrayformula(";"&$A:$A&","&$C:$C),$B:$B},
           "Select Col1,'"&E3&","&F3&","&G3&"' where Col2 ='"&E3&"'")))

解析字符串:(外部查询功能是清理/删除空白行,并重新排列匹配的列)

=query(
   arrayformula(split(
                       transpose(split(
                                  TEXTJOIN(";",true,J2:J10),
                                  ";",true,true)),",",true,true)),
    "Select Col1,Col3,Col2,Col4,Col5 where Col5 is not null",0)

此方法的唯一限制是文本连接最多只能包含 50k 个字符,因此如果您要处理更大的数据集,则必须重复第二个公式并将其与 { ; 堆叠起来。 }.