连接两个 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 并且不知道从哪里开始。我想我必须使用 filterarrayformula,但我不确定如何或从哪里开始。

=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 的详细信息我认为上述公式有效:

  • splitB 中的值,并将列 C 和列 D 中的值与确保不会在任何情况下使用的任意值连接起来列的
    • 因为所有内容都包含在 arrayformula 中,B 列拆分中的每个值都将连接起来
  • 拆分列 B 将为列 B 中没有值的行创建错误
    • 所以 ififerror 将检查拆分是否会产生错误,如果会产生错误,它将 return null 而不是来自第一颗子弹
  • 此时,源 table 中的每一行都有一行,其中列 B 拆分并与列 CD[=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)))