sql server中order by部分使用方式,sql server中order by部分使用方式
【 tulaoshi.com - SQLServer 】
order by常用的使用方式我就不提了项目的需求千变万化 
让我们看看下面几个怪排序需求 
--先创建一个表 
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,并且每组再按照id降序排列
--利用函数case 
select * from ai 
 order by case when no='4' then 1 
        when no='1' then 2 
                      when no='2' then 3 
                 end,id desc
--解决方案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))
来源:http://www.tulaoshi.com/n/20160129/1496510.html
看过《sql server中order by部分使用方式》的人还看了以下文章 更多>>
 
                                
                            SQL Server 2005中如何使用分析服务执行DDL任务
阳光的石头记63