您的位置:首页 > 数据库

SQL 表中记录查询排序随笔(sql server中order by使用方式小总结)

2007-04-19 13:59 731 查看
跟DB打交道,用得最多的是查询
既然查询就会有查询记录排序问题
我一直通过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
--利用函数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))

希望上面提到的知识对你有所提示

当然欢迎交流和指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐