Google Sheet - 动态合并两个表,包括重复项
Google Sheet - Combine two tables dynamically including duplicates
在 google sheet 中,我正在尝试扩展诸如查询或数组之类的东西,它们可以:
- 将两个 table 与一个公共标识符(在本例中为水果)连接在一起
- 展开可以包含多个重复项的结果(如果多人拥有相同类型的水果)。每个所有者-水果组合只会出现一次。
- 动态更新多个 rows/columns 结果,即使源列表发生变化
- 按其中一列对结果进行排序(在本例中为 table 1 中的“购买日期”)
Here is an example google sheet (EDITABLE - feel free) 您可以在其中看到两个源 table(Table 1 和 2),以及所需的输出 table(目前手动完成)。在 sheet 中向下滚动以使用基于公式的输出。
这里有一个简单的总结和例子:
- Table1包括一个名字,一个水果。一个名字可能有多个不同水果的条目(例如某人拥有两种水果)
- Table 2 包括一个水果和该水果的潜在多行说明。
- 输出 table 应包括每个水果的所有说明以及每个人的姓名(因此,一组水果说明可能会出现多次,具体取决于拥有该水果的人数)
想法是为每个人-水果设置多行的一组“说明”。
这个公式可以得到一个水果的所有详细信息(没有人的名字):
=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 个字符,因此如果您要处理更大的数据集,则必须重复第二个公式并将其与 { ; 堆叠起来。 }.
在 google sheet 中,我正在尝试扩展诸如查询或数组之类的东西,它们可以:
- 将两个 table 与一个公共标识符(在本例中为水果)连接在一起
- 展开可以包含多个重复项的结果(如果多人拥有相同类型的水果)。每个所有者-水果组合只会出现一次。
- 动态更新多个 rows/columns 结果,即使源列表发生变化
- 按其中一列对结果进行排序(在本例中为 table 1 中的“购买日期”)
Here is an example google sheet (EDITABLE - feel free) 您可以在其中看到两个源 table(Table 1 和 2),以及所需的输出 table(目前手动完成)。在 sheet 中向下滚动以使用基于公式的输出。
这里有一个简单的总结和例子:
- Table1包括一个名字,一个水果。一个名字可能有多个不同水果的条目(例如某人拥有两种水果)
- Table 2 包括一个水果和该水果的潜在多行说明。
- 输出 table 应包括每个水果的所有说明以及每个人的姓名(因此,一组水果说明可能会出现多次,具体取决于拥有该水果的人数)
想法是为每个人-水果设置多行的一组“说明”。
这个公式可以得到一个水果的所有详细信息(没有人的名字):
=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 个字符,因此如果您要处理更大的数据集,则必须重复第二个公式并将其与 { ; 堆叠起来。 }.