Google表格:QUERY使用单元格内容作为SQL变量

时间:2014-10-19 06:40:31

标签: google-sheets spreadsheet

以下是我正在使用的电子表格:

汇总表

(表单顶部)

screenshot

源数据

(同一张,低于输出)

screenshot

https://docs.google.com/spreadsheets/d/1-DrhZKYM2Kk4qDS1Koqz9eYy1L35JXIeyat61A2v0JQ/edit?usp=sharing

我正在使用QUERY函数填充摘要表中的相应Feed,并且需要将从A24开始的数据放入。

以下是我在单元格C6中使用的公式(在整个汇总表中使用了类似的公式):

=QUERY($A$24:$D$57, "Select D Where B='ENQ' and A='2/27/14 - Thu'")

这得到了正确的信息,但是公式需要被编辑为在其使用的每个单元格中都是唯一的。问题是无法用“A ='2/27/14-Thu'”快速填充单元格太具体了。

我试图将其设置为:

  • 中的日期将与接受数据之前在ROW 2中的标题上找到的日期进行比较
  • B中的房间类型将与汇总表的每一行中的A值进行比较

如何编写QUERY函数以将这些值称为变量,而不是使用原始函数中的文字字符串?

1 个答案:

答案 0 :(得分:7)

  1. 您可以让您的公式引用输出的A列中的索引,而不是'ENQ'等固定字符串。例如,您可以在单元格C4中更改公式:

    =QUERY($A$24:$D, "Select D Where B='" & $A4 & "' and A='2/27/14 - Thu'")
                                             ^^^^^^^
    

    &符号(&)用于连接字符串段。

    请注意,由于源数据扩展到工作表数据范围的底部,我们可以放弃指定底行。范围$A$24:$D将包含所有行,因此它会自动调整为其他源数据。

  2. 要比较日期,两个值都必须是日期。 “2/27/14 - 星期四”未被识别为源数据表中的日期,但作为文本,即使您已将数字格式设置为日期。因此,请确保将所有源数据更改为在A列中包含实际日期。

    您仍可以按自己喜欢的方式格式化日期 - 请参阅此屏幕截图。 A2的内容现在是正确的日期,“2/27/2014”,但格式设置为显示“mm / dd / yy - DDD”。只要数据是日期,就可以使用电子表格TEXT函数构建查询,以yyyy-mm-dd格式解释日期。

    screenshot

  3. 在源列中添加日期,您可以使用todate()标量函数告诉QUERY将源中的日期转换为查询日期,date用于将以下文字字符串(从C2)视为日期的关键字。

    单元格C4的结果函数是:

    =QUERY($A$24:$D , "Select D Where B='" & $A4 & "'and todate(A) = date '" & TEXT($C$2,"yyyy-MM-dd") & "'")
                                                            ^^^^^^      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    同样,对于D4:

    =QUERY($A$24:$D , "Select C Where B='"&$A4&"'and todate(A) = date '"&TEXT($C$2,"yyyy-MM-dd")&"'")
    
  4. 您可以改进E列中的计算,以处理列C或D中出现的#N/A结果:

    =if(isna(C12*D12),0,C12*D12)