首页 > 解决方案 > 如何在 Google 可视化 API 查询语言中转义列名?

问题描述

我有一个 Google 工作表,它在以下表达式中生成错误:

=query(Capacity!A5:FE135,"SELECT C,A WHERE "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&" = '"&C2&"' AND "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&" = 1 ORDER BY C")

对于单个特定输入值(日期),位于D2.

本质上,代码的目的是在第二张表(容量)中找到日期的列位置,并将D2该表中该列的值放入C当前表中的列中,同时仅选择匹配的行第二列。但是,当日期设置为特定值时,表达式将不会计算。

将这个庞大的表达式分解为其组成部分后,事实证明问题是由这个表达式引起的:

=SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")

其中,对于违规日期,正在返回 column BY

这意味着在 Google Visualization API 查询语言中评估的表达式是:

SELECT C,A WHERE BY = '' AND BW = 1 ORDER BY C

但查询语言将BY其视为保留字,而不是列,并且 barfs。

如何以某种方式转义列名以明确将其视为列名?

标签: google-visualizationgoogle-query-language

解决方案


方法是用反引号将有问题的部分括起来(就像我曾经在monospaced这里制作文本一样):

=query(Capacity!A5:FE135,"SELECT C,A WHERE `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&"` = '"&C2&"' AND `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&"` = 1 ORDER BY C")

所以查询看起来像

SELECT C,A WHERE `BY` = '' AND `BW` = 1 ORDER BY C

我认为当工作表变得如此之大以至于我们也在列时,这将有所帮助IF


推荐阅读