Google表格 - 当主工作表设置为条件

时间:2017-01-09 16:24:49

标签: sql google-sheets google-query-language

我正在努力尝试编写查询。

我有一张Google表格(here's a copy)我需要编写查询才能创建“主要摘要”。有问题的列是主选项卡上的列U.基本上,我需要从与列T中的名称匹配的工作表中导入列C D E和F,以获得与该行匹配的选定名称。

我知道我需要查询单个工作表并导入信息,例如

=QUERY(MASTER!T:T,"SELECT MIRANDA! C,D,E,F WHERE MASTER!T:T ='Miranda'",0)

但我没有随处可见。我的另一个想法是运行像

这样的SELECT函数
=SELECT MIRANDA (C,D,E,F) WHERE MASTER!T:T ='Miranda'

但那也是错的:)我怀疑我的语法是关闭的,因为我还在学习SQL。而且我相信谷歌应用程序仍会使用稍加修改的版本。我做错了什么?

1 个答案:

答案 0 :(得分:1)

查询函数的第一部分是要查询的范围。第二部分是抓什么。所以我认为你可能正在寻找这个:

=QUERY(MASTER!A:T,"SELECT C,D,E,F WHERE T ='Miranda'",0)

并且您不会收到任何列标题,因为0表示不使用任何行作为标题。

这将列出T为Miranda的行的C,D,E和F列。

修改

由于您没有在每个单独的工作表中显示时间戳,因此很难获得单个匹配,但只要表格中需要,M列就应该相当安全。

=FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2)

将返回一个单元格数组,C到F,用于Miranda选项卡中与M2值匹配的行。按原样,它会将这些放在包含公式和下一个3的列中。要将它们放在一个单元格中,您需要加入它们:

=join("|",FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2))

这将把|每个列项之间的字符。改变“|”你想要的是什么。

因此,要通过获取单元格T的值来使其工作,您需要INDIRECT():

=join("|",FILTER(INDIRECT( T2 & "!C:F"), INDIRECT( T2 & "!C:C")=M2))

另一个选项,特别是如果在每个选项卡中包含时间戳,将使用vlookup查找时间戳列。但是,使用M列可能无法正常工作:

=VLOOKUP(M2, INDIRECT( T2 & "!C:F"), 1, FALSE)

由于您使用的是自定义脚本,因此您也可以使用自定义脚本来复制公式,因为您无法将arrayformula()应用于任何这些方法。我相信有一些示例脚本可以做到这一点。问题是通过引用另一个单元来获取Range。我知道这样做的唯一方法是使用INDIRECT()函数,它不支持数组。另一种选择是编写一个自定义公式,返回您需要的范围值,并使用数组公式。