当列数是动态的时,如何在查询中使用 WHERE 子句?
How to use WHERE clause in a query when number of columns is dynamic?
我搜索过这个,但似乎找不到答案:
我使用电子表格中的查询功能来收集工作伙伴的评论。有 17 位评论者,我从本周和未来十周开始查询。但是,我只想要评论而不是最终结果中的空字段。我快到了,但是使用我现在使用的公式,我必须在查询的最后部分手动更新列数,因为列数根据评论数而变化。这是我的公式:
=transpose(query(transpose(query(QUERY(
IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!A1:U");
"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14,
Col15, Col16, Col17, Col18, Col19 where todate(Col1) > date '"&text(today()-7;
"yyyy-mm-dd")&"' limit 10");"select * where Col2<>'' or Col3<>'' or Col4<>'' or
Col5<>'' or Col6<>'' or Col7<>'' or Col8<>'' or Col9<>'' or Col10<>'' or Col11<>'' or
Col12<>'' or Col13<>'' or Col14<>'' or Col15<>'' or Col16<>'' or Col17<>'' or Col18<>''"));
"select * where Col2<>'' or Col3<>'' or Col4<>''"))
无论两个 "innermost" 查询 returns 有多少列,有什么方法可以让这个公式起作用吗?
这是带有 queried comments. It collects comments from this sheet 的电子表格(在现实生活中,这是使用 importrange-formula 从 19 张表中收集的)。
我希望我的问题是可以理解的,最重要的是,我的问题是可以解决的!
此函数从具有行和列 headers 的范围中删除空列和行。
你可以这样称呼它:
=FILTERROWSANDCOLS(IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!B1:U"))
请注意,我为此排除了 A 列。
function FILTERROWSANDCOLS(input) {
function rowIsBlank(row) {
return row.slice(1, row.length).join("") !== "";
}
return input.filter(rowIsBlank).transpose().filter(rowIsBlank).transpose();
}
Object.defineProperty(Object.prototype, "transpose", {value: function(){
var output = [];
for (var row = 0; row < this.length; row++) {
for (var col = 0; col < this[row].length; col++) {
if (row === 0){
output.push([this[row][col]]);
} else {
output[col].push(this[row][col]);
}
}
}
return output;
}});
我搜索过这个,但似乎找不到答案:
我使用电子表格中的查询功能来收集工作伙伴的评论。有 17 位评论者,我从本周和未来十周开始查询。但是,我只想要评论而不是最终结果中的空字段。我快到了,但是使用我现在使用的公式,我必须在查询的最后部分手动更新列数,因为列数根据评论数而变化。这是我的公式:
=transpose(query(transpose(query(QUERY(
IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!A1:U");
"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14,
Col15, Col16, Col17, Col18, Col19 where todate(Col1) > date '"&text(today()-7;
"yyyy-mm-dd")&"' limit 10");"select * where Col2<>'' or Col3<>'' or Col4<>'' or
Col5<>'' or Col6<>'' or Col7<>'' or Col8<>'' or Col9<>'' or Col10<>'' or Col11<>'' or
Col12<>'' or Col13<>'' or Col14<>'' or Col15<>'' or Col16<>'' or Col17<>'' or Col18<>''"));
"select * where Col2<>'' or Col3<>'' or Col4<>''"))
无论两个 "innermost" 查询 returns 有多少列,有什么方法可以让这个公式起作用吗?
这是带有 queried comments. It collects comments from this sheet 的电子表格(在现实生活中,这是使用 importrange-formula 从 19 张表中收集的)。
我希望我的问题是可以理解的,最重要的是,我的问题是可以解决的!
此函数从具有行和列 headers 的范围中删除空列和行。 你可以这样称呼它:
=FILTERROWSANDCOLS(IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!B1:U"))
请注意,我为此排除了 A 列。
function FILTERROWSANDCOLS(input) {
function rowIsBlank(row) {
return row.slice(1, row.length).join("") !== "";
}
return input.filter(rowIsBlank).transpose().filter(rowIsBlank).transpose();
}
Object.defineProperty(Object.prototype, "transpose", {value: function(){
var output = [];
for (var row = 0; row < this.length; row++) {
for (var col = 0; col < this[row].length; col++) {
if (row === 0){
output.push([this[row][col]]);
} else {
output[col].push(this[row][col]);
}
}
}
return output;
}});