【问题标题】:Google Sheets: Merge two tables (arrays) with many to many relationshipGoogle表格:合并两个具有多对多关系的表(数组)
【发布时间】:2022-08-21 17:44:57
【问题描述】:

我在 Google 表格中有 2 个表(数组),它们有一个相关栏目.我需要加入这些表。 我需要的是得到一个结果是这两个表有一个多对多关系。

Example sheet

在此示例中,我有两个表(A:C 和 E:G)。我需要一个类似表 I:N 的结果。

表 A:C -> 我有玩家以及他们完成了多少游戏。 (键:\'玩家\'+\'游戏\')

表 E:G -> 我有一些小组,每个小组对某些游戏都有不同的目标。 (键:\'组\'+\'游戏\')

我需要一个结果该列 \'game\' 是每个表的相关列。

注意
第一个表的第 15 行:(d - b6 - 55%),和
第二个表的第 7 行:(k7 - b7 - 60%),
没有关系,所以他们不在第三张桌子上。

我尝试结合一些公式,如ARRAYFORMULAVLOOKUPFILTERINDEXOFFSET... 但我没有成功。


我找到了带有脚本SUPERSQL() 函数的解决方案,但我不想使用脚本,只使用公式。

  • 完毕! docs.google.com/spreadsheets/d/… 我在范围上有两个表:\'A:C\' 和 \'E:G\'。我希望得到 \'I:N\' 的公式,在这个例子中我手动填写。
  • 您最好的选择是SUPERSQL,但您不喜欢使用脚本。
  • 我使用SUPERSQL 的问题是因为我的其他脚本停止工作。 :(

标签: google-sheets google-sheets-formula vlookup array-formulas


【解决方案1】:

主要思想是垂直放置一个键列,水平放置另一个键列(TRANSPOSE())。

外部QUERY 仅用于重新排列列和排序。

有关TRANSPOSE(QUERY(TRANSPOSE(...))) 的更多信息,例如here

解决方案:

=QUERY(
  {
    A1:C1\ E1:G1;
    ARRAYFORMULA(
      SPLIT(
        REGEXREPLACE(
          QUERY(
            FLATTEN(
              IF(
                FILTER(B2:B; B2:B <> "") <> TRANSPOSE(FILTER(F2:F; F2:F <> ""));;
                    TRANSPOSE(QUERY(TRANSPOSE(FILTER(A2:C & "@"; B2:B <> ""));; COLUMNS(A2:C))) & " "
                  & QUERY(TRANSPOSE(FILTER(E2:G & "@"; F2:F <> ""));; COLUMNS(E2:G))
              )
            );
            "WHERE Col1 IS NOT NULL";
          );
          "@$";
        );
        "@ ";
      )
    )
  };
  "SELECT Col4, Col1, Col2, Col6, Col3
   ORDER BY Col4, Col1, Col2";
  1
)

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多