首页 > 解决方案 > 谷歌表格查询返回条件选择?

问题描述

在这里完成 SQL 业余爱好者。我有一个谷歌表,用户在其中输入格式的数据A[B or C]。所以使用这张表:

+-------+-------------+-------------+
| A     | B           | C           |
+-------+-------------+-------------+
| Apple | Red         | Crunchy     |
| Pear  |             | Crunchy     |
| Lemon |             |             |
+-------+-------------+-------------+

..我希望得到以下回报:

输入apple[red]返回Apple Red

输入apple[crunchy]返回Apple Crunchy

因此,除了取决于匹配发生在哪一列之外,基本上只返回Bor 。实际上可能在任一列中或(但不能同时在两者中)。CAcrunchyBC

到目前为止我有这个:

Select A, B, C where UPPER(H) matches '.*(?:^|,|,\s)"&REGEXEXTRACT(Q3,"^[^\[]+")&"(?:,\s|,|$).*' and B matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' limit 1

但显然它没有按我的意愿工作,并且比赛A B C按预期返回。

所以我想我的问题是你能有条件地根据匹配返回列吗?以及使用和匹配的最佳方式ORB什么C?我试着只是推杆,and B or C matches但失败了。我想你可以写出另一行,B matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"'但它开始变得相当复杂,我猜有一个更简单的方法。

我想知道的另一件事是,如果仅返回用户输入,是否有一种方法可以在上面同时设置B和可选。我打算用一张表和 2 个查询来执行此操作,具体取决于是否存在,但想知道它是否可以在一个 SQL 语句中执行。CappleAppleif[]

谢谢你的帮助。挠头不会留下任何头发!

标签: sqlgoogle-sheetsgoogle-query-language

解决方案


好的,那么您将如何在 Google 表格中执行此操作?谷歌表格查询有两个问题,让它有点尴尬

(1) 没有工会

(2) 你不能返回一个空集——它会给你一个错误信息。

这两个单独的查询如下所示:

=ArrayFormula(query({A:B,A:A&"["&B:B&"]"},"select Col1,Col2 where Col3='"&F1&"'"))

=ArrayFormula(query({A:A,C:C,A:A&"["&C:C&"]"},"select Col1,Col2 where Col3='"&H1&"'"))

其中 F1 和 H1 包含所需的输入。

要组合它们,您必须像这样输入 IFERROR 语句:

=ArrayFormula(iferror(query({A:B,A:A&"["&B:B&"]"},"select Col1,Col2 where Col3='"&J1&"'"),iferror(query({A:A,C:C,A:A&"["&C:C&"]"},"select Col1,Col2 where Col3='"&H1&"'"),"")))

这是假设只有一个查询提供了结果。


推荐阅读