如何让SQL按ORDERBY数组顺序排列

ids = "1,2,3,4,5,6";

sql="select bookid,bookname from books where bookid in (" + ids + ") order by charindex(bookid,"+ids+")"

CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置

bookid 是要到ids中寻找所在的位置

 

下面的是网上查的资料

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

posted on 2014-08-07 11:49  靖洋  阅读(1801)  评论(3编辑  收藏  举报

导航