Google sheets 谷歌电子表格中的内部连接

Google sheets 谷歌电子表格中的内部连接,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,我不知道也不记得我要找的东西的技术名称,但我想一个例子就足以让你完全理解我要找的东西 给定表格A a x1 b x2 c x1 和表B x1 x x1 y x1 z x2 p x2 z 我需要表C a x a y a z b p b z c x c y c z 我正在寻找一个公式或一组公式来得到表C 我想只需要在C表中为A表中的每个对应值添加一行A!第2列至表B!专栏1但我找不到如何 我认为这是一个简单的SQL内部联接。试试: =ARR

我不知道也不记得我要找的东西的技术名称,但我想一个例子就足以让你完全理解我要找的东西

给定表格A

a   x1
b   x2
c   x1
和表B

x1  x
x1  y
x1  z
x2  p
x2  z
我需要表C

a   x
a   y
a   z
b   p
b   z
c   x
c   y
c   z
我正在寻找一个公式或一组公式来得到表C

我想只需要在C表中为A表中的每个对应值添加一行A!第2列至表B!专栏1但我找不到如何

我认为这是一个简单的SQL内部联接。

试试:

=ARRAYFORMULA({TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$A2:A&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦"))), IFNA(VLOOKUP(
 TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$B2:B&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦")))&COUNTIFS(
 TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$A2:A&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦"))), 
 TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$A2:A&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦"))), ROW(INDIRECT("O1:O"&COUNTA(
 TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$B2:B&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦")))))), "<="&ROW(INDIRECT("O1:O"&COUNTA(
 TRIM(FLATTEN(SPLIT(QUERY(REPT(IF($A2:A="",,$B2:B&"♦"), IFNA(VLOOKUP($B2:$B, QUERY({$D2:$D}, 
 "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦"))))))), 
 {D2:D&COUNTIFS(D2:D, D2:D, ROW(O2:O), "<="&ROW(O2:O)), E2:E}, 2, 0))})
=ARRAYFORMULA({TRIM(flatte)(SPLIT)(查询(REPT)(如果($A2:A=“”,$A2:A&)”♦"), IFNA(VLOOKUP($B2:$B),查询({$D2:$D},
“选择Col1,COLL(Col1),其中Col1不为空(按Col1分组)”,2,0)),9^9),”♦),IFNA(VLOOKUP(
修剪(展平)(拆分)查询(报告)(如果($A2:A=“”,$B2:B&“♦“”,IFNA(VLOOKUP($B2:$B),查询({$D2:$D},
“选择Col1,COLL(Col1),其中Col1不为空(按Col1分组)”,2,0)),9^9),”♦)和COUNTIFS(
修剪(展平(拆分)查询(报告)(如果($A2:A=“”,$A2:A&”)♦“”,IFNA(VLOOKUP($B2:$B),查询({$D2:$D},
“选择Col1,COLL(Col1),其中Col1不为空(按Col1分组)”,2,0)),9^9),”♦"))), 
修剪(展平(拆分)查询(报告)(如果($A2:A=“”,$A2:A&”)♦“”,IFNA(VLOOKUP($B2:$B),查询({$D2:$D},
“选择Col1,COLL(Col1),其中Col1不为空(按Col1分组)”,2,0)),9^9),”♦),行(间接(“O1:O”和COUNTA(
修剪(展平)(拆分)查询(报告)(如果($A2:A=“”,$B2:B&“♦“”,IFNA(VLOOKUP($B2:$B),查询({$D2:$D},

“选择Col1,COLL(Col1),其中Col1不为空(按Col1分组)”,2,0)),9^9),”♦“Las答案无法处理TableA!column1上的重复项。 显示关键公式的说明:

只需添加一个中间列

JOIN(",",FILTER(E$2:E,D$2:D=L2))
所以你可以从他们那里获取数据

INDEX(TRANSPOSE(SPLIT(JOIN(",",FILTER(M$2:M,K$2:K=O2)),",")),COUNTIF(O$1:O1,"="&O2)+1) 
乘成一列

ArrayFormula(TRIM(FLATTEN(SPLIT(QUERY(REPT(IF(A2:A="",,A2:A&"♦"), IFNA(VLOOKUP(B2:B, QUERY({D2:D}, "select Col1,count(Col1) where Col1 is not null group by Col1"), 2, 0))),,9^9), "♦"))))
还有一张照片。

您要做的是SQL中的联接,它复制值。当两边都不匹配时,INTERNAR、left、right或full定义行为

我能想到的最简单的方法是使用来创建自定义函数,以便在公式中使用:

函数范围(范围1,索引1,范围2,索引2){
常量结果=[]
for(让范围1的第1行){
for(让范围2的第2行){
if(第1行[index1]==第2行[index2]){
常数r=[…第1行,…第2行]
//自己取下钥匙
r、 拼接(第1行长度+索引2,1)
r、 拼接(index1,1)
结果:推(r)
}
}
}
返回结果
}
然后,您可以在左上栏的表格公式中使用它:

=ARRAYFORMULA(JOINRANGES(A1:B3, 1, D1:E6, 0))
第一个和第三个参数是范围,第二个和第四个参数是范围内列的索引(从0开始)

最终结果是:


如果您不了解Google Apps脚本,有很多非常有用的指南和文档。

很抱歉,我在表a的第2列上复制了数据,我认为这是很清楚的。这对重复不起作用在这个电子表格示例上勾选工作表问题定义:)@White_King answer更新了…哇,这似乎很有效,但你对这件事的知识水平太惊人了。我要用它。非常感谢!确保所有级别都有相同的大小。在看到@player0 work之后,我确信这可以做得更有效、更紧凑,但在这件事上,这是我能给予的最困难的,这是一个ba谷歌电子表格查询的sic主题,我从未在网上看到过答案:S