declare @a table(name varchar(10),Freq varchar(10))
insert @a select 'F42XHL1','900M'  
union all select 'F42XHL2','900M'  
union all select 'F42XHL3','900M'  
union all select 'F42XHL7','1800M'  
union all select 'F42XHL8','1800M'  
union all select 'F42XHL9','1800M'  select * from @a  order by (cast(replace(name,'f42xhl','') as int)-1)%3,cast(replace(freq,'m','') as int)--result
/*name       Freq       
---------- ---------- 
F42XHL1    900M
F42XHL7    1800M
F42XHL2    900M
F42XHL8    1800M
F42XHL3    900M
F42XHL9    1800M(所影响的行数为 6 行)
*/

解决方案 »

  1.   

    虽然你的方法对上面那种情况有用,但不是这样的。如果排序前为表如下:
    name           Freq           -字段  
    F42XHL3        900M  
    F42XHL7        1800M  
    F42XHL8        1800M  
    F42XHL9        1800M  排序后希望得到的结果是:  
    name           Freq           -字段    
    F42XHL3        900M  
    F42XHL7        1800M  
      

  2.   


    你的条件说的太精减了,呵呵,不太明白,估计用分组,和union ,就能解决
    qq307366759 注明csdn