Google sheets 使用单元格内容作为SQL变量的查询

Google sheets 使用单元格内容作为SQL变量的查询,google-sheets,google-sheets-formula,google-sheets-query,Google Sheets,Google Sheets Formula,Google Sheets Query,以下是我正在使用的电子表格: 汇总表 (表格顶部) 源数据 (同一页,在输出下方) 我正在使用这个函数在汇总表中填充相应的提要,其中包含从A24开始的数据,需要放入其中 以下是我在单元格C6中使用的公式(汇总表中使用了类似的公式): 这将获得正确的信息,但需要编辑公式,使其在每个单元格中都是唯一的。无法快速填充单元格的问题是A='2/27/14-Thu'过于具体 我试图设置它,以便: 在接受数据之前,A中的日期将与第2行标题中的日期进行比较 B中的房间类型将与汇总表每行A中的值进行比较

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

汇总表 (表格顶部)

源数据 (同一页,在输出下方)

我正在使用这个函数在汇总表中填充相应的提要,其中包含从A24开始的数据,需要放入其中

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

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

我试图设置它,以便:

  • 在接受数据之前,A中的日期将与第2行标题中的日期进行比较
  • B中的房间类型将与汇总表每行A中的值进行比较
如何编写查询函数以将这些值作为变量引用,而不是在原始函数中使用文本字符串

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

    =QUERY($A$24:$D, "Select D Where B='" & $A4 & "' and A='2/27/14 - Thu'")
                                             ^^^^^^^
    
    符号(
    &
    )用于连接字符串段

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

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

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

  • 对于源列中的日期,可以使用
    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")&"'")
    
  • 可以改进E列中的计算,以处理C列或D列中出现的
    #N/A
    结果:

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

  • 哇!非常感谢你的帮助!不幸的是,我不能对你竖起大拇指。你真的为我做这项工作,真是太好了!!“没问题,”吉米!我已经更新了这个问题,包括了所有相关的信息,对更多的人有用。如果您愿意,您可以删除电子表格的链接并删除共享。嗨,Mogsdad!最后一件事。。。如何有效地将日期单元格转换为日期?在我删除“-Thu”之前,它不会为我点击进入日期格式。我试着把你建议的自定义日期公式等弄得乱七八糟。谢谢我刚才做了-删除“-Thu”。然后复制并粘贴到具有相同日期的其他行,然后编辑下一行,冲洗,重复。如果您有数百个这样的东西,您可以用
    =datevalue(左(A3,(find(“-”,A3)-1))
    填充一个临时列,然后将结果日期值复制回原始列。(该公式适用于第3行,顺便说一句。)
    =if(isna(C12*D12),0,C12*D12)