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

Jim*_*mmy 2 google-sheets google-sheets-query google-sheets-formula

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

汇总表

(表单顶部)

截图

来源数据

(同一张,低于输出)

截图

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

我正在使用QUERY函数填充摘要表中的相应提要,并且需要放置从A24开始的数据.

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

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

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

我试图设置它,以便:

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

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

Mog*_*dad 8

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

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

    ampersand(&)用于连接字符串段.

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

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

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

    截图

  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") & "'")
                                                            ^^^^^^      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    Run Code Online (Sandbox Code Playgroud)

    同样,对于D4:

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

    =if(isna(C12*D12),0,C12*D12)
    
    Run Code Online (Sandbox Code Playgroud)