连接两个 table 并计算 Google 工作表中第二个 table 的值
Join two tables and count values from second table in Google Sheets
我有两张数据是这样的-
Sheet 1
:
A
--------
1 | Name |
2 | sue |
3 | bob |
4 | mary |
5 | john |
Sheet 2
:
A B C D
---------------------------------------------
1 | ID | Asignee | Due | Days Left |
2 | ID001 | sue, bob | 1 | 5 |
3 | ID002 | sue, mary | 2 | 8 |
4 | ID003 | bob | 3 | 2 |
5 | ID004 | bob, john | 1 | 9 |
6 | ID005 | bob, mary, john | 4 | 1 |
7 | ID006 | sue, bob | 1 | 8 |
8 | ID007 | john, sue, mary | 2 | 6 |
3 日 sheet,我想加入并合并数据以获得一些 totals/counts。
Sheet 3
:
A B C D
---------------------------------------------------------
1 | Name | Number Rows | Total Due | Minimum of Days Left |
2 | sue | 4 | 6 | 5 |
3 | bob | 5 | 10 | 1 |
4 | mary | 3 | 8 | 1 |
5 | john | 3 | 7 | 1 |
第 3 个 sheet:
- 它与
Sheet 1
具有相同的行数和值
- 列
Sheet 3!B
是 Sheet 2
中的 # 行,其中 Sheet 2!B
包含 Sheet 1!A
(或Sheet 3!A
)
Sheet 2
中有 4 行,其中 Sheet 2!B
包含 sue
Sheet 2
中有 5 行,其中 Sheet 2!B
包含 bob
Sheet 2
中有 3 行,其中 Sheet 2!B
包含 bob
Sheet 2
中有 3 行,其中 Sheet 2!B
包含 bob
- 第
Sheet 3!C
列是 Sheet 2!C
的 总数 ,其中 Sheet 2!B
包含 Sheet 1!A
(或Sheet 3!A
)
- 列
Sheet 3!D
是 Sheet 2!D
的 最小值 其中 Sheet 2!B
包含 Sheet 1!A
(或Sheet 3!A
)
我一直盯着一片空白 sheet 并且不知道从哪里开始。我想我必须使用 filter
和 arrayformula
,但我不确定如何或从哪里开始。
=ARRAYFORMULA(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"))
@IMtheNachoMan 编辑以添加有关 why/how 的详细信息我认为上述公式有效:
split
列 B
中的值,并将列 C
和列 D
中的值与确保不会在任何情况下使用的任意值连接起来列的
- 因为所有内容都包含在
arrayformula
中,B
列拆分中的每个值都将连接起来
- 拆分列
B
将为列 B
中没有值的行创建错误
- 所以
if
和 iferror
将检查拆分是否会产生错误,如果会产生错误,它将 return null
而不是来自第一颗子弹
- 此时,源 table 中的每一行都有一行,其中列
B
拆分并与列 C
和 D
[=60= 连接]
join
使用第二个任意值的所有行确保不在任何列中
- 一定要忽略空值
- 空值将来自第一个项目符号拆分中没有任何值的行
split
使用的第二个任意值的连接数据(由于上一个项目符号没有空行)
transpose
它回到行
trim
每行删除空格(不确定 how/where 是否添加了空格)
split
每行中第一个任意值的列
- 将其用作
query
调用的输入并使用聚合函数来获取我们想要的数据
如果您真的需要保留顺序,请执行以下操作:
=ARRAYFORMULA(IFERROR(VLOOKUP(Sheet1!A2:A,
QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"), {1, 2, 3, 4}, 0)))
我有两张数据是这样的-
Sheet 1
:
A
--------
1 | Name |
2 | sue |
3 | bob |
4 | mary |
5 | john |
Sheet 2
:
A B C D
---------------------------------------------
1 | ID | Asignee | Due | Days Left |
2 | ID001 | sue, bob | 1 | 5 |
3 | ID002 | sue, mary | 2 | 8 |
4 | ID003 | bob | 3 | 2 |
5 | ID004 | bob, john | 1 | 9 |
6 | ID005 | bob, mary, john | 4 | 1 |
7 | ID006 | sue, bob | 1 | 8 |
8 | ID007 | john, sue, mary | 2 | 6 |
3 日 sheet,我想加入并合并数据以获得一些 totals/counts。
Sheet 3
:
A B C D
---------------------------------------------------------
1 | Name | Number Rows | Total Due | Minimum of Days Left |
2 | sue | 4 | 6 | 5 |
3 | bob | 5 | 10 | 1 |
4 | mary | 3 | 8 | 1 |
5 | john | 3 | 7 | 1 |
第 3 个 sheet:
- 它与
Sheet 1
具有相同的行数和值
- 列
Sheet 3!B
是Sheet 2
中的 # 行,其中Sheet 2!B
包含Sheet 1!A
(或Sheet 3!A
)Sheet 2
中有 4 行,其中Sheet 2!B
包含sue
Sheet 2
中有 5 行,其中Sheet 2!B
包含bob
Sheet 2
中有 3 行,其中Sheet 2!B
包含bob
Sheet 2
中有 3 行,其中Sheet 2!B
包含bob
- 第
Sheet 3!C
列是Sheet 2!C
的 总数 ,其中Sheet 2!B
包含Sheet 1!A
(或Sheet 3!A
) - 列
Sheet 3!D
是Sheet 2!D
的 最小值 其中Sheet 2!B
包含Sheet 1!A
(或Sheet 3!A
)
我一直盯着一片空白 sheet 并且不知道从哪里开始。我想我必须使用 filter
和 arrayformula
,但我不确定如何或从哪里开始。
=ARRAYFORMULA(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"))
@IMtheNachoMan 编辑以添加有关 why/how 的详细信息我认为上述公式有效:
split
列B
中的值,并将列C
和列D
中的值与确保不会在任何情况下使用的任意值连接起来列的- 因为所有内容都包含在
arrayformula
中,B
列拆分中的每个值都将连接起来
- 因为所有内容都包含在
- 拆分列
B
将为列B
中没有值的行创建错误- 所以
if
和iferror
将检查拆分是否会产生错误,如果会产生错误,它将 returnnull
而不是来自第一颗子弹
- 所以
- 此时,源 table 中的每一行都有一行,其中列
B
拆分并与列C
和D
[=60= 连接] join
使用第二个任意值的所有行确保不在任何列中- 一定要忽略空值
- 空值将来自第一个项目符号拆分中没有任何值的行
split
使用的第二个任意值的连接数据(由于上一个项目符号没有空行)transpose
它回到行trim
每行删除空格(不确定 how/where 是否添加了空格)split
每行中第一个任意值的列- 将其用作
query
调用的输入并使用聚合函数来获取我们想要的数据
如果您真的需要保留顺序,请执行以下操作:
=ARRAYFORMULA(IFERROR(VLOOKUP(Sheet1!A2:A,
QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"), {1, 2, 3, 4}, 0)))