联接两个表并计算Google表格中第二个表中的值

时间:2019-06-27 16:01:14

标签: google-sheets transpose google-sheets-formula array-formulas google-sheets-query

我有两个工作表,数据像这样-

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 |

在第三张纸上,我想合并并合并数据以获得一些总数/计数。

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 |

对于第三张纸:

  • 它具有与Sheet 1相同的行数和值
  • Sheet 3!BSheet 2中的#行数,其中Sheet 2!B 包含 Sheet 1!A(或{{ 1}})
    • Sheet 3!A中有4行,其中Sheet 2包含Sheet 2!B
    • sue中有5行,其中Sheet 2包含Sheet 2!B
    • bob中有3行,其中Sheet 2包含Sheet 2!B
    • bob中有3行,其中Sheet 2包含Sheet 2!B
  • bob列是Sheet 3!C总计,其中Sheet 2!C 包含 Sheet 2!B(或{{1} })
  • Sheet 1!ASheet 3!A最小值,其中Sheet 3!D 包含 Sheet 2!D(或{{1 }})

我一直盯着一张空白纸,不知道从哪里开始。我认为我必须使用Sheet 2!BSheet 1!A,但不确定如何或从哪里开始。

1 个答案:

答案 0 :(得分:2)

=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编辑,以添加有关我认为上述公式起作用的原因/方式的详细信息:

  • splitB中的值,并将C列和D列中的值与确保在任何列
    • 因为所有内容都包裹在arrayformula中,所以列B拆分中的每个值都将被连接起来
  • 拆分列B将为列B中没有值的行创建一个错误
    • 因此ififerror将检查拆分是否会产生错误,如果这样做会返回null而不是第一个项目符号的连接字符串
  • 在这一点上,源表中的每一行都有一行,其中列B被拆分并与列CD串联
  • join所有行均使用第二个人工数值,以确保不在任何列中
    • 确保忽略空值
    • 在第一个项目符号拆分中没有任何值的行中会出现
    • 空值
  • split所使用的第二个人工值上的联接数据(前一个项目符号没有空行)
  • transpose将其重新排成行
  • trim每行以删除空格(不确定如何/在何处添加空格)
  • split每行中具有第一个精算值的列
  • 将此作为query调用的输入,并使用聚合函数获取所需的数据

0


如果您确实需要保留订单,请执行以下操作:

=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)))

0