标题: sql server中order by部分使用方式
ljjk5
元帅
Rank: 1


荣誉会员奖章
UID 46706
精华 1
积分 99426
帖子 49691
威望 554
金币 48489
热心 505
阅读权限 100
注册 2007-2-25
状态 离线
sql server中order by部分使用方式

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))

网友 ljjk5 签名 - 网友社区 ===
顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-9-8 21:10
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP