在Google电子表格中由ASC查询订单

时间:2018-02-01 09:01:41

标签: sorting google-sheets google-query-language

我有一个使用以下查询的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 .. 但是正如你在图片中看到的那样,没有发生......

enter image description here

无论如何我能做到这一点吗?

3 个答案:

答案 0 :(得分:3)

如果您在号码后面总是有一个连字符( - ),您可以在进行查询之前尝试提取号码并对其进行排序:

=query(sort(A:A,value(left(A:A,(search("-",A:A)-1))),true),"Select  Col1 where Col1<'999'")

(改变范围以适应)。

答案 1 :(得分:3)

您需要将字符串转换为数字:

  • 1 - xxxxx1
  • 10 - yyyy10
  • ...

字符串按字符串排序:"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")

enter image description here

注意:

  • 公式使用过滤器组合数组。过滤器将范围限制为仅需要的行。
  • 过滤器中的
  • {}用于组合数组。
  • 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#”