在多个选项卡之间构建查询以按名称连接值

时间:2016-05-05 22:32:26

标签: google-sheets

我试图在Google表格中编写一个SQL查询来尝试获取"匹配"来自两个不同标签的结果,但遇到了一些麻烦。

这张表基本上是一个自动评分引擎,适用于进行两部分测试(书面和实践)的教师。输入结果后,我想使用一些SQL从两个选项卡中获取结果并将它们整理成最终得分。

Link to the sheet in question

有一个"实用分数"标签(从相关的Google表单中获取所有数据),以及"书面评分"标签。我想获得在这两个标签中匹配的教师的名字,并为他们提供相关的分数,但我在编写正确的SQL时遇到了麻烦。

我尝试做的大部分工作都很好。我可以通过以下SQL获得最终的实用分数:

=query(PracticalScores!A2:E, "select A, count(E),SUM(E)/3 group by A")

我也可以按如下方式提取书面分数:

=query('Written Scores'!B2:C,"select B,C")

但我也想要两者的交集,以及我遇到问题的地方。

=query(A8:E, "select A,C,D where A = E")

将简单地返回名称匹配的行,并且我希望名称匹配的实例,无论行是否匹配。

也就是说,我希望名称匹配的所有行从选项卡1到选项卡2,而不仅仅是恰好排成一行的几行。

如果我没有解释清楚,请告诉我,我可以提供更多信息。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

由于query函数不支持联接,因此无法在一个查询中完成。相反,可以使用以下设备:

=arrayformula(vlookup(name column, table, # of column to extract, False))

例如,假设我有一个表

+---+-------+---+
|   |   A   | B |
+---+-------+---+
| 2 | Jim   | 3 |
| 3 | Sarah | 4 |
| 4 | Bob   | 5 |
+---+-------+---+

我要添加另一列,从

中取出
+---+-------+---+
|   |   E   | F |
+---+-------+---+
| 2 | Sarah | 9 |
| 3 | Bob   | 8 |
| 4 | Jim   | 7 |
+---+-------+---+

基本思路是将单元格C2放入公式

=arrayformula(vlookup(A2:A, E2:F, 2, false))

将查找E列中第一个表(A列)的每个名称,并返回F列中的匹配值。结果:

+---+-------+---+---+
|   |   A   | B | C |
+---+-------+---+---+
| 2 | Jim   | 3 | 7 |
| 3 | Sarah | 4 | 9 |
| 4 | Bob   | 5 | 8 |
+---+-------+---+---+

实际上,应该过滤掉空查找值以提高性能:

=arrayformula(vlookup(filter(A2:A, len(A2:A)), E2:F, 2, false))

如果第二个表包含第一个表中没有的名称,则上述公式不会返回它们。在这种情况下,最好准备一个完整的名称列表,例如

=sort(unique({Sheet1!A2:A; Sheet2!A2:A}))

从两张A列中收集名称,消除重复和排序。然后使用上面的vlookup查找那些。