此问题涉及使用= QUERY函数
在Google电子表格中加入两个数据库我在A1:C3
范围内有一张这样的表a d g
b e h
c f i
我有另一张桌子
c j m
a k n
b l o
我希望决赛桌看起来像这样
a d g k n
b e h l o
c f i j m
我可以通过在单元格D1中非常轻松地使用vlookup函数并将其粘贴到其中来实现此目的,但我的数据集非常庞大。我需要一整页的vlookups和Google Spreadsheet告诉我我的复杂程度有限。
我查看Google的查询语言参考...似乎没有提到一种类型的“加入”功能。你会认为这将是一个简单的“加入A”类型的操作。
任何人都可以在没有vlookup的情况下解决这个问题吗?
答案 0 :(得分:30)
Google QUERY Language版本0.7(2016)并不包含JOIN(LEFT JOIN)运算符,但这可以通过使用数组公式来实现,该结果可以用作QUERY函数或其他函数的输入使用
数组公式和array handling features of Google Sheets使得在两个简单表之间建立联接成为可能。为了便于阅读,建议的公式使用命名范围而不是范围引用。
=ArrayFormula( { table1, vlookup(ID,table2,COLUMN(Indirect("R1C2:R1C"&COLUMNS(table2),0)),0) } )
备注:
Indirect("R1C2:R1C"&COLUMNS(table2),0)
替换为table2的2到列数的常量数组。 请参阅this sheet以获取示例
2017年,Google改进了关于QUERY QUERY function的英文官方帮助文章。它仍然没有包含这样的主题,但可能有助于理解它是如何工作的。
答案 1 :(得分:15)
您可以使用ARRAYFORMULA
,也可以直接拖动此公式:
导入或QUERY
之后的第一个表格;在D栏中:
=QUERY(Sheet2!A1:C3, "Select B,C WHERE A='" & A1 & "'", 0)
答案 2 :(得分:2)
因此,这可以回答如何使用Vlookup函数,但仅在一个单元格中进行操作。
在您的示例中,假设每个数据表都有以下单元格引用:
表1:Sheet1!A1:C3
a d g
b e h
c f i
表2:Sheet2!A1:C3
c j m
a k n
b l o
这是公式的构造方式。
=ArrayFormula(
{
Sheet1!A1:C,
vlookup(Sheet1!A1:A, {Sheet2!A1:A, Sheet2!B1:C}, {2,3}, false)
}
)
使此公式生效的关键是了解如何在Vlookup范围中使用大括号。您基本上将Range的第一个单元格引用定义为与Vlookup Search_Key匹配的列。范围中其余的单元格引用与您要联接的列有关。
索引写为{2,3}以返回Range的第二和第三列(Range总共3列);大括号与Vlookup索引中的Arrayformula无关,但是从Vlookup函数返回多列是必需的。不写{1,2,3}的原因是,您不想包括用于连接目的的列。
即使第二个表中的联接列位于该表的第三列,也可以使用这种联接公式。 假设此示例中的原始数据如下所示:
表1(表1):
a d g
b e h
c f i
表2(表格2):
j m c
k n a
l o b
如果您这样编写公式,仍将获得所需的结果(如连接数据表中所示):
=ArrayFormula(
{
Sheet1!A1:C,
vlookup(Sheet1!A1:A, {Sheet2!C1:C, Sheet2!A1:B}, {2,3}, false)
}
)
联接数据表:
a d g k n
b e h l o
c f i j m
在Join公式中,请注意Table2的第三列是Vlookup范围中的第一个单元格引用!
之所以可行,是因为当您在Range中使用大括号(与Arrayformula结合使用)时,Vlookup Search_Key不会在原始数据中查找列作为公共分母,而是会在其中使用Array大括号作为参考,以查找一列作为公分母(默认情况下,这是范围的第一列)。
我已经写了一篇有关该主题的综合指南:
答案 3 :(得分:1)
如果你可以映射每个"索引" (a,b,c)到特定的行或列,然后您可以使用INDEX
函数。
在这种情况下,你可以映射一个'到A列(或第1行),' b'到B列(或第2行),依此类推。
此外,Merge Tables似乎解决了这个确切的用例。
答案 4 :(得分:0)
使用'其他' A5:C7中的表格,请尝试:
=query({A1:C3,query(sort(A5:C7,1,TRUE),"Select Col2,Col3")})
答案 5 :(得分:0)
我使用Javascript LINQ(语言集成查询)解决了这个问题。
它使您可以指定具有复杂连接条件的Javascript。您还可以执行其他SQL查询,例如对表进行分组,投影,排序和过滤,就像它们是数据库表一样。请看下面的链接。
请注意,在LINQ查询语言中,我用下划线替换了列名中的所有空格,以使它们成为有效的JS标识符。
https://docs.google.com/spreadsheets/d/1DHtQlQUlo-X_YVfo-Wo-b7315sSk2pxL5ci4Y9lxvZo/edit?usp=sharing