我有一个使用以下查询的Google电子表格:
= query('RespostasdoFormulário1'!A1:AG;“选择D,G,H,I,J,K,L,M,N,O,P,Q,R ,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF在哪里 B = D ASC的“7ºA”订单“; 1)
然而,表格中的D栏:“RespostasdoFormulário1”,其值为数字,然后是前面的名称,当它在 sheet1 中执行查询时,我想要它订购ASC,如1,2,3,...,10,11,12 .. 但是正如你在图片中看到的那样,没有发生......
无论如何我能做到这一点吗?
答案 0 :(得分:3)
如果您在号码后面总是有一个连字符( - ),您可以在进行查询之前尝试提取号码并对其进行排序:
=query(sort(A:A,value(left(A:A,(search("-",A:A)-1))),true),"Select Col1 where Col1<'999'")
(改变范围以适应)。
答案 1 :(得分:3)
您需要将字符串转换为数字:
1 - xxxxx
至1
10 - yyyy
至10
字符串按字符串排序:"1", "10", "11", ..., "2", ..., "22", "23", ...
表示它们按第一个字符排序,然后是第二个字符,依此类推。
解决方案#1是在数据表中添加一个额外的列,并使用类似REGEXEXTRACT(A2,"^\d+")*1
的公式提取数字。
解决方案#2是即时获取数字。下面是样本公式:
=QUERY(FILTER({REGEXEXTRACT(A:A,"^\d+")*1,A:C},B:B="a"),"select * order by Col1")
注意:
{}
用于组合数组。REGEXEXTRACT(A:A,"^\d+")*1
会给出数字列。 ^
表示字符串的开头,\d
表示数字,+
表示一个或多个。 *1
是将字符串"10"
转换为数字10
Col1
表示法,因为源是一个数组。答案 2 :(得分:0)
如果还有其他人遇到按字典顺序对数字列进行查询的QUERY函数的问题,我通过在数字列中选择合适的格式来解决它,从而使数字顺序与字典顺序重合。
假设B列有2位整数(即0到99之间的数字)
通过在B列中添加个性化的数字格式“ 0#”,数字将显示为01、02、03,...,99。因此,公式
=query(A1:B100,"SELECT * ORDER BY B ASC")
按自己的意愿工作。
这要求事先知道位数。对于0到1000之间的数字,格式为“ 00#”