如何使用Google可视化API查询语言转义列名?

时间:2018-10-22 16:49:07

标签: google-visualization google-query-language

我有一个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","")

对于有问题的日期,将返回BY列。

这意味着使用Google Visualization API查询语言评估的表达式为:

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

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

如何才能以某种方式转义列名,以使其清楚地被视为列名?

1 个答案:

答案 0 :(得分:1)

方法是用反引号将引起问题的部分包围起来(就像我以前在此处制作文本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上。