Google表格查询可返回条件选择?

时间:2018-11-17 17:18:25

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

在此处完成SQL Amateur。我有一个Google工作表,用户可以在其中输入A[B or C]格式的数据。因此,使用此表:

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

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

输入apple[red]返回Apple Red

输入apple[crunchy]返回Apple Crunchy

因此,除了B之外,基本上只返回{​​{1}}或C,具体取决于匹配发生在哪一列。实际上,A可以在任一列{ {1}}或crunchy(但不是两个)。

到目前为止,我已经拥有了:

B

但是很明显,它无法按我的要求运行,并且匹配项按预期返回C

所以我想我的问题是,您能否根据匹配条件有条件地返回列,以及Select A, B, C where UPPER(H) matches '.*(?:^|,|,\s)"&REGEXEXTRACT(Q3,"^[^\[]+")&"(?:,\s|,|$).*' and B matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' limit 1A B C匹配中使用OR的最佳方法是什么?我尝试仅放置B,但失败了。我想您可以写出另一行像C一样,但是所有这些事情开始变得很混乱,我想这是一种更简单的方法。

我想知道的另一件事是,是否存在一种使and B or C matchesB matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"'均为可选的方式,因此在上面的情况下,如果用户仅输入BC返回。我本打算使用工作表apple和2个查询来完成此操作,这取决于是否存在Apple,但想知道它是否可以在一个SQL语句中使用。

感谢您的帮助。这样的头不会刮任何头发!

2 个答案:

答案 0 :(得分:1)

好的,那么您将如何在Google表格中执行此操作? 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&"'"),"")))

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

答案 1 :(得分:0)

如果我理解您的问题,为什么不这样做:

create table mytable (A text, B text, C text);
insert into mytable values ('Apple', 'Red', 'Crunchy'), ('Pear', null, 'Crunchy'), ('Lemon', null, null);
select * from mytable;

-- Example 1: input = apple[red]
select a, b from mytable where upper(a || '[' || b || ']') = upper('apple[red]')
union all 
  select a, c from mytable where upper(a || '[' || c || ']') = upper('apple[red]');

-- Example 2: Same query different input = apple[crunchy]
select a, b from mytable where upper(a || '[' || b || ']') = upper('apple[crunchy]')
union all 
  select a, c from mytable where upper(a || '[' || c || ']') = upper('apple[crunchy]'); 

您甚至可以在upper(a ||'['|| b ||']')和upper(a ||'['|| c ||']')上创建功能索引