我的一个表 t1 :
字段: id(varchar型)   ord(number型)
记录: 01              1
      02              3
      0201            3
      0202            2
      0203            1
      03              4
      04              2
等等,想得到以下结果顺序:
       id             ord
       01              1
      04              2
      02              3
      0201            3
      0202            2
      0203            1
      03              4
规则是:首先按照id字段的长短排序(同样长短的按ord),如果id字段有子字段记录比如02下有0201、0202、0203,则子字段必须紧接着父字段段记录。
不知道我表达清楚了没有?
      

解决方案 »

  1.   

    select id,ord 
    from t1 
    order by length(trim(id)),ord,id
      

  2.   

    select id,ord 
    from t1 
    order by length(trim(id)),ord,id
      

  3.   

    试过了楼上的,不行啊
    自己试了一下:select * from t1 order by substr(id,1,length(id)-2)||lpad(ord,2,0)
    搞定了,还是谢谢了
      

  4.   

    select id, ord
          ,y
          ,min(y) over(partition by substr(id, 1, 2)) x
      from (
            select id, ord, row_number() over (order by length(id), ord)  y
             from t1 
            ) 
    order by x