sql server order by 的一些高级用法

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

你可能感兴趣的:(数据库基础)