如何使用 Query 或 Vlookup 连接表

How to join tables using Query or Vlookup

我有 2 sheet

人 sheet 有

[company    first_name  last_name   full_name   address_line1   address_city    address_state   address_zip address_country telephone   email   order_id    order_date  order_time  processor   order_type  order_currency  commission  campaign_id]

销售额sheet有

[DATE   PROSPECT NAME   EMAIL ADDRESS   CONTACT METHOD  PRODUCT RESULT  NOTES ]

如何在 people.email = sales.EMAIL ADDRESS 时生成报告并仅在它们匹配时显示记录(并非所有销售 sheet)

报告字段是

full_name
EMAIL ADDRESS
PRODUCT
commission

Sample File

请尝试使用基本公式连接 sheets + 查询以跳过某些行。

基本公式:

=FILTER({Sales!B14:B,Sales!C14:C,Sales!E14:E, vlookup(Sales!E14:E,{People!B2:B,People!D2:D},2,), Sales!F14:F},Sales!A14:A<>"")

您需要的公式:

=QUERY(FILTER({Sales!B14:B,Sales!C14:C,Sales!E14:E, IFERROR(vlookup(Sales!E14:E,{People!B2:B,People!D2:D},2,), "do not show"), Sales!F14:F},Sales!A14:A<>""),"select * where Col4 <> 'do not show'")

工作原理

它使用 iferror(expression, "do not show")#N/A 错误替换为文本“不显示”。

然后它使用查询来隐藏值为“不显示”的行:

"select * where Col4 <> 'do not show'"

基本公式和问题


使用说明:

  1. Sales!B14:B,Sales!C14:C,Sales!E14:E 是您需要先 select 的一些列
  2. IFERROR(vlookup(Sales!E14:E,{People!B2:B,People!D2:D},2,) 将 return 列从“人物”中,它是列 People!D2:D。请注意列 Sales!E14:EPeople!B2:B 都包含一个键,在示例中它是电子邮件列表。
  3. Sales!F14:F是return下一个栏目。
  4. 过滤条件Sales!A14:A<>""是跳过原sheet中的空行。您还可以将其他条件添加到过滤器中。
  5. query 部分将缩短报告并跳过键(电子邮件)不匹配的值。您可以在查询中添加其他条件。

注意。 Google 表格中的查询语言没有 joins,提供的解决方案是一种解决方法。它展示了如何借助表格中的 vlookup 函数进行连接。

  • 提供的公式从 sheet“销售”收集行,并使 vlookup 到 sheet“人员”。您可能还想制作反之亦然的报告:从“People”收集数据,从“Sales”收集“vlookup”数据。

“反之亦然”报告:

=QUERY(FILTER({vlookup(People!B2:B ,{Sales!E14:E, Sales!B14:B, Sales!C14:C, Sales!E14:E},{2, 3, 4},), People!B2:B, IFERROR(vlookup(People!B2:B ,{Sales!E14:E, Sales!F14:F},2,),100500)},People!A2:A<>""),"select * where Col5 <> 100500")

注意! 在此公式中使用数值 100500 来跳过值,因为查询使用单一数据类型(数字或文本)。


如果您对它的工作原理有任何疑问,请在此处发表评论。