【问题标题】:Google Sheet - Combine two tables dynamically including duplicates谷歌表格 - 动态组合两个表格,包括重复项
【发布时间】:2019-12-20 19:59:11
【问题描述】:

在谷歌表格中,我正在尝试扩展诸如查询或数组之类的内容:

  • 使用通用标识符(在本例中为水果)将两个表连接在一起
  • 扩展可包含多个重复项的结果(如果多人拥有相同类型的水果)。每个所有者-水果组合只会出现一次。
  • 即使源列表发生变化,也可以动态更新多行/多列的结果
  • 按其中一列对结果进行排序(本例中为表 1 中的“购买日期”)

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


下面是一个简单的例子:

  • 表 1 包括一个名称,一个水果。一个名称可能有多个包含不同水果的条目(例如,某人拥有两种水果)
  • 表 2 包含一个水果和可能针对该水果的多行说明。
  • 输出表应包括每个水果的所有说明以及每个人的姓名(因此,一组水果说明可能会显示多次,具体取决于拥有该水果的人的数量)

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

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

=FILTER(查询($E$3:$G$9, "选择 E,F,G"),$E$3:$E$9=""&$B$3&"")

(其中 B3 = “苹果”)

但我不确定是否有某种方法可以将这些名称与名称连接在一起并使其动态化 - 因此,如果添加更多人或水果,则输出列表将完全更新。 例如:

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

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

【问题讨论】:

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


    【解决方案1】:

    我制作了一个带有解决方案的选项卡副本(公式以黄色突出显示)。该方法基本上是将文本拼接成 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&"'")))

    Parsing out String:(外部Query功能是清理/删除空白行,并重新排列匹配的列)

    =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 个字符,因此如果您要处理更大的数据集,则必须重复第二个公式并将其与 { ; }。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多