sql - 谷歌表格查询返回条件选择?
问题描述
在这里完成 SQL 业余爱好者。我有一个谷歌表,用户在其中输入格式的数据A[B or C]
。所以使用这张表:
+-------+-------------+-------------+
| A | B | C |
+-------+-------------+-------------+
| Apple | Red | Crunchy |
| Pear | | Crunchy |
| Lemon | | |
+-------+-------------+-------------+
..我希望得到以下回报:
输入apple[red]
返回Apple Red
输入apple[crunchy]
返回Apple Crunchy
因此,除了取决于匹配发生在哪一列之外,基本上只返回B
or 。实际上可能在任一列中或(但不能同时在两者中)。C
A
crunchy
B
C
到目前为止我有这个:
Select A, B, C where
UPPER(H) matches '.*(?:^|,|,\s)"®EXEXTRACT(Q3,"^[^\[]+")&"(?:,\s|,|$).*'
and B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' limit 1
但显然它没有按我的意愿工作,并且比赛A B C
按预期返回。
所以我想我的问题是你能有条件地根据匹配返回列吗?以及使用和匹配的最佳方式OR
是B
什么C
?我试着只是推杆,and B or C matches
但失败了。我想你可以写出另一行,B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"'
但它开始变得相当复杂,我猜有一个更简单的方法。
我想知道的另一件事是,如果仅返回用户输入,是否有一种方法可以在上面同时设置B
和可选。我打算用一张表和 2 个查询来执行此操作,具体取决于是否存在,但想知道它是否可以在一个 SQL 语句中执行。C
apple
Apple
if
[]
谢谢你的帮助。挠头不会留下任何头发!
解决方案
好的,那么您将如何在 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&"'"),"")))
这是假设只有一个查询提供了结果。
推荐阅读
- python - 重塑表格以获取每个唯一值的频率
- java - 类不可访问中定义的方法
- python - 即使有主循环,tk 窗口也不会显示
- javascript - Vuejs 的意义何在
? - go - 如何在 Go 中获取结构的方法列表?
- amazon-web-services - 使用 AWS 基础设施为静态网站实施数据搜索系统的建议
- linux - 如何通过系统调用获取 CPU MHz(在 /proc/cpuinfo 中)?
- java - 如何执行原生查询并获得反馈?
- java-8 - 克隆 javax.mail.Message 和克隆 javax.mail.Multipart,Java 8
- r - RStudio Amazon EC2 实例磁盘空间不足