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

时间:2019-12-20 19:59:11

标签: google-apps-script google-sheets google-sheets-formula google-sheets-query

在Google表格中,我正在尝试扩展可以执行以下操作的查询或数组:

  • 将两个表与一个公共标识符(在这种情况下为水果)结合在一起
  • 扩展结果,其中可以包括多个重复项(如果多个人的水果类型相同)。每个所有者-水果组合只会出现一次。
  • 动态更新多个行/列中的结果,即使源列表发生了变化
  • 将结果按列之一排序(在这种情况下,表1中的“购买日期”)

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


这是一个带有示例的简单摘要:

  • 表1包含一个名字,一个水果。一个名字可能有多个带有不同水果的条目(例如,某人拥有两种水果)
  • 表2包含一个水果以及该水果的多行说明。
  • 输出表应在每个人的名字旁边包括每个水果的所有说明(因此,取决于有多少人拥有该水果,一组水果的说明可能会多次显示)

想法是为每个人的水果在多行上有一组“指令”。

此公式仅能获取单个水果的所有详细信息(无人名):

  

= FILTER(query($ E $ 3:$ G $ 9,“ select E,F,G”),$ E $ 3:$ E $ 9 =“”&$ B $ 3&“”)

     

(其中B3 =“苹果”)

但是我不确定是否可以通过某种方式将它们与名称结合在一起并使其具有动态性-因此,如果添加更多的人或水果,输出列表将完全更新。 例如:

  

= {人果1;人果2;人果N}

我完全可以使用中介表或其他方法来获得结果。

1 个答案:

答案 0 :(得分:2)

我制作了带有解决方案的选项卡副本(公式以黄色突出显示)。该方法基本上是将文本拼接成CSV类型的格式。我用“;”分隔行,用“,”分隔列。最后一步是使用拆分/数组公式将其解析出来。

创建CSV类型的字符串:

=arrayformula(
TEXTJOIN(",",true,
    Query(
           {arrayformula(";"&$A$3:$A$8&","&$C$3:$C$8),$B$3:$B$8},
           "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)

此方法的唯一局限性在于,文本连接最多只能包含5万个字符,因此,如果要处理较大的数据集,则必须重复第二个公式并用{进行堆叠; }。