在表 table1 中有以下字段
序号   代号   名称
3      001    a
1)     023    g
2      043    l
3)     094    k
1      028    s
2)     081    o如何实现以下排序结果
1      028    s
2      043    l
3      001    a
1)     023    g
2)     081    o
3)     094    k
请高手帮忙!最好能给出代码

解决方案 »

  1.   

    SELECT * FROM table1 WHERE Right(序号,1) <> ')' ORDER BY 序号
    UNION
    SELECT * FROM table1 WHERE Right(序号,1) = ')' ORDER BY 序号
      

  2.   

    还可以这样:select *
    from tb
    order by iif(right(序号,1)=')',1,0),cint(replace(序号,")",""))iif(right(序号,1)=')',1,0) 
    序号如果包含)号,排序是1,否则排序为0。这样所有无)号的就排在所有有)的之前cint(replace(序号,")",""))
    将序号的数字部分转换为数字类型排序,文本类型大小排序规则与数字不同
      

  3.   

    select *
    from tb
    order by iif(right(序号,1)=")",1,0),cint(replace(序号,")",""))
      

  4.   

    谢谢,各位!!
    一楼给出的答案我也用过,可结果是
    1      028    s 
    1)     023    g 
    2      043    l 
    2)     081    o 
    3      001    a 
    3)     094    k 而得不到想要的结果!?
    还请高手不吝赐教!!
      

  5.   

    SELECT *
    FROM table1 
    ORDER BY len(序号)在ACCESS中测试过了。
    但你的序号是字符型,不可能排出123顺序,
    只能把有括号的放在一起,没括号的放在一起。
      

  6.   

    楼主只是个示例,如果有多位数字,用len明显不对吧?
      

  7.   

    select *
    from tb
    order by iif(right(序号,1)=")",1,0),val(序号)
      

  8.   

    用UNION也可以:
    select 序号,代号,名称 
    from (
        SELECT '0' as id,序号,代号,名称 FROM tb WHERE Right(序号,1) <> ')'
        UNION
        SELECT '1',序号,代号,名称 FROM tb WHERE Right(序号,1) = ')'

    order by id,val(coid)
      

  9.   

    1 楼中用 Union 不会错的,你是否将数据绑定到列表控件,该控件又进行的排序?
      

  10.   

    SELECT * from 1 order by len(序号) ,序号
      

  11.   


    已经测试通过其实还可以这么排序,
    select * from 1 order by 反向函数(序号) desc
      

  12.   



    SELECT * from 1 order by len(序号) ,序号 
    后面的序号很重要,这个是分组后的再次排序
      

  13.   

    len(序号) 的缺陷 6 楼已经指出了。
      

  14.   

    SELECT * FROM table1 ORDER BY Len(序号),序号 
      

  15.   

    SELECT * FROM table1 ORDER BY len(序号), 序号;测试结果:序号     代号     名称
    1 028 s
    2 043 l
    3 001 a
    1) 023 g
    2) 081 o
    3) 094 k
      

  16.   

    of123兄:
    用len就楼主的示例是可以的,如果序号的数字部分有多位,这样就不行了
      

  17.   

    我想我这个是一定可以的
    测试通过!select * from table order by right(id,1)<>")",val(id)
      

  18.   

    多谢各位!
    已经解决了。
    使用了vbman2003 的方法
    再次表示感谢!!