原贴
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号
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))
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 行受影响)