表中记录查询排序(设置排序规则)

--先创建一个表 
create table ai( 
id int not null, 
no varchar(10) not null 

go 

--往表中插入数据 
insert into ai 
 select 105,'2' 
 union all 
 select 105,'1' 
 union all 
 select 103,'1' 
 union all 
 select 105,'4' 
go 

--查询效果如下: 
select * from ai 
go 
id          no         
----------- ---------- 
105         2 
105         1 
103         1 
105         4 


i. 
--要求的查询结果如下 
--即要求no列的数据按'4','1','2'排列 
id          no         
----------- ---------- 
105         4 
105         1 
103         1 
105         2



--解决方案1 
--利用函数CHARINDEX 
select * from ai 
 order by charindex(no,'4,1,2') 

--解决方案2 
--利用函数case 
select * from ai 
 order by case when no='4' then 1 
        when no='1' then 2 
                      when no='2' then 3 
                 end 

--解决方案3 
--利用UNION 运算符 
select * from ai 
 where no='4' 
union all 
select * from ai 
 where no='1' 
union all 
select * from ai 
 where no='2' 

ii. 
--查询要求指定no='4'排第一行,其他的行随机排序 
id          no         
----------- ---------- 
105         4 
105         2 
105         1 
103         1 

--解决方案 
select * from ai 
 order by case when no='4' then 1 
   else 1+rand() 
  end 

iii. 
--查询要求所有行随机排序

--解决方案 
select * from ai 
 order by newid() 


iiii 
--有一表ab有列i,其中数据如下: 
i varchar(10) 
a1 
a10 
a101 
a5 
p4 
p41 
p5 


--现在要求列i中数据先按字母排序,再按数字排序 
--效果如下: 
a1 
a5 
a10 
a101 
p4 
p5 
p41 

--解决方案 
select * from ab 
 order by left(i,1),convert(int,substring(i,2,8000))

原文地址:https://www.cnblogs.com/accumulater/p/6147008.html