原贴 
http://topic.csdn.net/u/20110224/15/f1ebe8bc-c055-4bcc-826b-8047acc682d5.html?seed=637091013&r=71813524#r_71813524if not object_id('tb') is null
  drop table tb
GoCreate table tb(id int,pid char(20),bid varchar(30))
insert into tbselect 1,'[2010]001','豫勘测评备字[2010]2号' union all
select 2,'[2010]002','豫勘测评备字[2010]12号' union all
select 3,'[2010]003','豫勘测评不备字[2010]3号' union all
select 4,'[2010]003-1','豫勘测评备字[2010]1号' union all
select 5,'[2010]004','豫勘测评不备字[2010]21号' union all
select 6,'[2010]005','豫勘测评备字[2010]4号' union allselect 7,'[2010]006','豫勘测评备字[2010]12号' union all
select 8,'[2010]007','豫勘测评备字[2010]63号' union all
select 9,'[2010]008','豫勘测评备字[2010]259号' union all
select 10,'[2010]009','豫勘测评不备字[2010]23号' union all
select 11,'[2010]010','豫勘测评不备字[2010]211号' union allselect 12,'[2011]001','豫勘测评备字[2011]1号' union all
select 13,'[2011]002','豫勘测评备字[2011]2号' union all
select 14,'[2011]003','豫勘测评备字[2011]3号' union all
select 15,'[2011]004','豫勘测评不备字[2011]1号' union allselect 16,'[2011]004-1','豫勘测评备字[2011]16号' union all
select 17,'[2011]005','豫勘测评不备字[2011]2号' union all
select 18,'[2011]006','豫勘测评备字[2011]29号' union all
select 19,'[2011]007','豫勘测评备字[2011]123号' union all
select 20,'[2011]008','豫勘测评不备字[2011]12号' union all
select 21,'[2011]008-1','豫勘测评备字[2011]235号' union all
select 22,'[2011]009','豫勘测评不备字[2011]36号' union all
select 23,'[2011]010','豫勘测评不备字[2011]121号' union all
select 24,'[2011]011','豫勘测评不备字[2011]222号' union all
select 25,'[2011]012','豫勘测评备字[2011]369号go
需要的结果是这样的,其他列不管是什么顺序,关键是这列豫勘测评备字[2011]1号
豫勘测评备字[2011]2号
豫勘测评备字[2011]3号
...
豫勘测评备字[2011]12号
豫勘测评备字[2011]223号
...豫勘测评不备字[2011]1号
豫勘测评不备字[2011]2号
豫勘测评不备字[2011]3号
豫勘测评不备字[2011]12号
豫勘测评不备字[2011]22号
豫勘测评不备字[2011]122号
...
豫勘测评备字[2010]1号
豫勘测评备字[2010]2号
豫勘测评备字[2010]13号
豫勘测评备字[2010]41号
豫勘测评备字[2010]121号
...
豫勘测评不备字[2010]1号
豫勘测评不备字[2010]2号
豫勘测评不备字[2010]11号
豫勘测评不备字[2010]22号
豫勘测评不备字[2010]121号
豫勘测评不备字[2010]222号

解决方案 »

  1.   

    select * from tb order by
    convert(int, substring(bid, charindex('[',bid)+1, charindex(']',bid)-charindex('[',bid)-1)) desc,
    left(bid, charindex('[',bid)),
    convert(int, substring(bid, charindex(']',bid)+1, len(bid)-charindex(']',bid)-1))
      

  2.   

     if not object_id('tb') is null
      drop table tb
    GoCreate table tb(id int,pid char(20),bid varchar(30))
    insert into tbselect 1,'[2010]001','豫勘测评备字[2010]2号' union all
    select 2,'[2010]002','豫勘测评备字[2010]12号' union all
    select 3,'[2010]003','豫勘测评不备字[2010]3号' union all
    select 4,'[2010]003-1','豫勘测评备字[2010]1号' union all
    select 5,'[2010]004','豫勘测评不备字[2010]21号' union all
    select 6,'[2010]005','豫勘测评备字[2010]4号' union allselect 7,'[2010]006','豫勘测评备字[2010]12号' union all
    select 8,'[2010]007','豫勘测评备字[2010]63号' union all
    select 9,'[2010]008','豫勘测评备字[2010]259号' union all
    select 10,'[2010]009','豫勘测评不备字[2010]23号' union all
    select 11,'[2010]010','豫勘测评不备字[2010]211号' union allselect 12,'[2011]001','豫勘测评备字[2011]1号' union all
    select 13,'[2011]002','豫勘测评备字[2011]2号' union all
    select 14,'[2011]003','豫勘测评备字[2011]3号' union all
    select 15,'[2011]004','豫勘测评不备字[2011]1号' union allselect 16,'[2011]004-1','豫勘测评备字[2011]16号' union all
    select 17,'[2011]005','豫勘测评不备字[2011]2号' union all
    select 18,'[2011]006','豫勘测评备字[2011]29号' union all
    select 19,'[2011]007','豫勘测评备字[2011]123号' union all
    select 20,'[2011]008','豫勘测评不备字[2011]12号' union all
    select 21,'[2011]008-1','豫勘测评备字[2011]235号' union all
    select 22,'[2011]009','豫勘测评不备字[2011]36号' union all
    select 23,'[2011]010','豫勘测评不备字[2011]121号' union all
    select 24,'[2011]011','豫勘测评不备字[2011]222号' union all
    select 25,'[2011]012','豫勘测评备字[2011]369号'
    select * from tb
    order by left(right(BID,len(BID)-charindex('[',BID)+1),6) desc,
             (case when charindex('不备',bid) > 0 then 1 else 0 end),
             cast(right(left(bid,len(bid)-1),len(BID)-charindex(']',BID)-1) as int)/*
    id          pid                  bid
    ----------- -------------------- ------------------------------
    12          [2011]001            豫勘测评备字[2011]1号
    13          [2011]002            豫勘测评备字[2011]2号
    14          [2011]003            豫勘测评备字[2011]3号
    16          [2011]004-1          豫勘测评备字[2011]16号
    18          [2011]006            豫勘测评备字[2011]29号
    19          [2011]007            豫勘测评备字[2011]123号
    21          [2011]008-1          豫勘测评备字[2011]235号
    25          [2011]012            豫勘测评备字[2011]369号
    15          [2011]004            豫勘测评不备字[2011]1号
    17          [2011]005            豫勘测评不备字[2011]2号
    20          [2011]008            豫勘测评不备字[2011]12号
    22          [2011]009            豫勘测评不备字[2011]36号
    23          [2011]010            豫勘测评不备字[2011]121号
    24          [2011]011            豫勘测评不备字[2011]222号
    4           [2010]003-1          豫勘测评备字[2010]1号
    1           [2010]001            豫勘测评备字[2010]2号
    6           [2010]005            豫勘测评备字[2010]4号
    7           [2010]006            豫勘测评备字[2010]12号
    2           [2010]002            豫勘测评备字[2010]12号
    8           [2010]007            豫勘测评备字[2010]63号
    9           [2010]008            豫勘测评备字[2010]259号
    3           [2010]003            豫勘测评不备字[2010]3号
    5           [2010]004            豫勘测评不备字[2010]21号
    10          [2010]009            豫勘测评不备字[2010]23号
    11          [2010]010            豫勘测评不备字[2010]211号(25 行受影响)