这种排序 能否实现
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 '