【问题标题】:QUERY using cell contents as SQL variablesQUERY 使用单元格内容作为 SQL 变量
【发布时间】:2014-10-19 06:40:30
【问题描述】:

我正在使用的电子表格如下所示:

汇总表

(表格顶部)

源数据

(同一张纸,在输出下方)

我正在使用QUERY 函数在汇总表中填充适当的提要,其中需要放入从 A24 开始的数据。

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

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

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

我试图这样设置:

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

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

【问题讨论】:

    标签: google-sheets google-sheets-formula google-sheets-query


    【解决方案1】:
    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 - Thu”在源数据表中不会被识别为日期,而是文本,即使您已将数字格式设置为日期。因此,请确保将所有源数据更改为在 A 列中包含实际日期。

      您仍然可以按照自己喜欢的方式设置日期格式 - 请参阅此屏幕截图。 A2 的内容现在是正确的日期“2/27/2014”,但格式设置为显示“mm/dd/yy - DDD”。只要 data 是日期,就可以使用电子表格 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") & "'")
                                                              ^^^^^^      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      

      同样,对于 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)
      

    【讨论】:

    • 哇!非常感谢你的帮助!不幸的是,我不能给你点赞。你真的为我做这项工作真是太棒了!
    • 没问题,@吉米!我已更新问题以包含所有相关信息并对更多人有用。如果需要,您可以删除电子表格的链接并删除共享。
    • 嗨,莫格兹达!最后一件事...您如何有效地将日期单元格转换为日期?在我删除“- Thu”之前,它不会为我点击日期格式。我尝试过使用您建议的自定义日期公式等。谢谢!
    • 我就是这么做的 - 删除了“- Thu”。然后复制并粘贴到具有相同日期的其他行,然后编辑下一个,冲洗,重复。如果你有数百个这样的东西,你可以用=datevalue(LEFT(A3,(find("-",A3)-1))) 填充一个临时列,然后将生成的日期值复制回原始列。 (顺便说一句,该公式适用于第 3 行。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2021-09-10
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多