【问题标题】:Join two tables and count values from second table in Google Sheets在 Google 表格中加入两个表并计算第二个表中的值
【发布时间】:2019-06-27 16:01:14
【问题描述】:

我有两张表格,其中包含这样的数据-

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!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

我一直盯着一张白纸,不知道从哪里开始。我想我必须使用filterarrayformula,但我不确定如何或从哪里开始。

【问题讨论】:

  • @player0 不幸的是我现在不能。在工作和工作中,Enterprise g Suite 不允许我对外分享。我会在家里创建一个临时表。

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


【解决方案1】:
=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 调用的输入,并使用聚合函数来获取我们想要的数据


如果你真的需要保持秩序:

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

【讨论】:

  • 这行得通。我是否可以编辑您的答案以添加详细说明我认为它正在做什么/如何让您查看/确认我的理解?
  • @IMTheNachoMan 你可以试试 :)
  • 已添加。介意复习?我还没有分解第二个公式。
  • 未添加空格。它是 B 列的剩余部分,因为值是逗号+空格分隔的
  • 我可能需要为此发布一个新问题,但如果 Sheet1Sheet2 在一个电子表格上,但我希望数据在另一个电子表格中,我会怎么做?使用上面的公式,我需要引用不同的范围——如果我使用IMPORTRANGE+QUERY,那么我将无法引用各个范围。我通过多个IMPORTRANGE 语句找到了一种方法。想法?或者让我知道我是否应该发布一个新问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多