日期:2014-05-18  浏览次数:20598 次

这种排序 能否实现
Tab_a
id       a_field,b_field
3         a3             b3
4         a4             b4
....................
....................
10       a10           b10
....................
....................
12       a12           b12
...................
....................
....................
112     a112         b112


根据一个   字符串   来排序
eg   :   str1=   "12,3,112,265,10 "  
12,3,112,256,10   分别是指Tab_a   中的ID  

希望将Tab_a   表中的记录按   ID   为   str1   中的顺序来来排
(如果Tab_a   没有与   str1[i]   相等的   id   就不考虑)

------解决方案--------------------
---?
select * from tab_a order by charindex(id, '12,3,112,265,10 ')
------解决方案--------------------
declare @str varchar(200)
set @str= '12,3,112,265,10 '

select * from 表 order by charindex( ', '+rtrim(id)+ ', ' , ', '+@str+ ', ')
------解决方案--------------------
--例子
create table Tab_a(id int,a_field varchar(10),b_field varchar(10))
insert tab_a
select 3 , 'a3 ', 'b3 '
union select 265 , 'a4 ', 'b4 '
union select 10 , 'a10 ', 'b10 '
union select 12 , 'a12 ', 'b12 '
union select 3 , 'a112 ', 'b112 '


select * from tab_a order by charindex(rtrim(id), '12,3,112,265,10 ')


drop table tab_a

/*

id a_field b_field
----------- ---------- ----------
12 a12 b12
3 a112 b112
3 a3 b3
265 a4 b4
10 a10 b10

(5 row(s) affected)
*/
------解决方案--------------------
create table Tab_a(id int,a_field varchar(10),b_field varchar(10))
insert tab_a
select 3 , 'a3 ', 'b3 '
union select 265 , 'a4 ', 'b4 '
union select 10 , 'a10 ', 'b10 '
union select 12 , 'a12 ', 'b12 '
union select 3 , 'a112 ', 'b112 '
union select 112 , 'a12 ', 'b12 '
union select 13 , 'a112 ', 'b112 '


select * from tab_a order by charindex( ', '+rtrim(id)+ ', ', ',12,3,112,265,10, ')


drop table tab_a
------解决方案--------------------
好快啊~厉害
------解决方案--------------------
用类似 charindex(rtrim(id), '12,3,112,265,10 ') 这样的表达式不稳妥,当对 1/11/12/112/ 这些ID处理时会存在歧异。
------解决方案--------------------
ls 说的对,刚刚急着回复没太注意 :)

------解决方案--------------------
if exists (select name from demo1.dbo.sysobjects where id=object_id( 'tab_a '))
drop table tab_a
create table Tab_a(id int,a_field varchar(10),b_field varchar(10))
insert tab_a
select 3 , 'a3 ', 'b3 '
union select 265 , 'a4 ', 'b4 '