查询WHERE子句的值范围?

时间:2014-03-18 21:13:38

标签: sql google-sheets

我有一个Google电子表格,我想运行QUERY功能。但我希望WHERE语句检查一系列值。我基本上在寻找在SQL中使用IN语句的内容 - Google Spreadsheets中的IN等价物是什么?所以现在我有:

=QUERY(Sheet1!A3:AB50,"Select A,B, AB WHERE B='"& G4 &"'")

这很有效。但我真正需要的是相当于:

=QUERY(Sheet1!A3:AB50,"Select A,B, AB WHERE B='"& G4:G7 &"'")

当然,该陈述失败了。如何获得一系列值的位置?这些是文本值,如果这会产生影响。

3 个答案:

答案 0 :(得分:4)

绝招Zolley!这是一个小改进。

代替:

= CONCATENATE(G3,“ |”,G4,“ |”,G5,“ |”,G6,“ |”,G7)

我们可以使用

= TEXTJOIN(“ |”,1,G3:G7)

当将每个单元格一个接一个地添加到公式中毫无意义时,这也允许我们使用更大的数组。

UPD:

进一步,我尝试将两个公式组合在一起以排除帮助单元,然后我们开始:

= QUERY(Sheet1!A3:AB50,“选择A,B,AB,其中B匹配'^。(”&TEXTJOIN(“ |”,1,G3:G7)&“)。 $'“)

在我自己的项目中使用了它,效果很好!

答案 1 :(得分:3)

虽然我现在不是完美的答案,但我可以找到问题的解决方法,可以在少量数据中使用(希望这就是这里的情况:))

第一步:你应该创建一个"辅助细胞"其中你将G4:G7细胞连接到" |"字符:

= CONCATENATE(G3," |",G4," |",G5," |",G6," |& #34;,G7) - 让我们说它是细胞H2的内容。

现在,您应该按如下方式更改上述查询:

= QUERY(Sheet1!A3:AB50,"选择A,B,AB,其中B匹配' ^。*("& H2&")。* $ '&#34)

这应该可以解决问题。基本上我们"匹配"运算符允许使用正则表达式,这也允许使用|来构造符号

正如我所说,它是一种解决方法,它有缺点,但我希望它会有所帮助。

答案 2 :(得分:-2)

我有同样的问题,在我的研究中遇到了你的问题。你的连接想法让我思考。问题是我在where子句中使用的范围是动态的。行数会发生变化。这让我进入了Join功能,这让我想到了这个:

=(QUERY('Sheet1!A3:AB50,"select A where B = "& JOIN(" OR B = ",ARRAY_CONSTRAIN($A$5:A,COUNTIF($G$4:$G,">0"),1)) &"")

COUNTIF计算包含数据的行数。我在这个范围内使用数字,所以"!= ''"可能比">0"更合适。 ARRAY_CONSTRAIN创建一个包含仅包含数据的单元格的数组。 JOIN将范围转换为where子句的查询语言。

需要在JOIN函数中使用基本相同文本的where子句启动where子句。请注意,我使用的是数字,因此我不需要围绕值‘’。这适用于我的电子表格,我希望它有所帮助。