SQL SERVER数据库中order by的一些高级用法
本文章属于转载文章,原博客地址为:https://blog.csdn.net/dieyingao/article/details/4196142
先创建一个表
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 |
一:查询结果如下的解决方案
即要求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'
二:查询要求指定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
三:查询要求所有行随机排序
解决方案
select * from ai
order by newid()
四:有一表ab有列i,其中数据如下:
i | varchar(10) |
---|---|
a | 1 |
a | 10 |
a | 101 |
a | 5 |
p | 4 |
p | 41 |
p | 5 |
现在要求列i中数据先按字母排序,再按数字排序,效果如下
i | varchar(10) |
---|---|
a | 1 |
a | 5 |
a | 10 |
a | 101 |
p | 4 |
p | 5 |
p | 41 |
解决方案
select * from ab
order by left(i,1),convert(int,substring(i,2,8000))