根据函数中SQL内部的顺序对列进行排序
我有一个类似下面的查询,我希望返回的记录的顺序与在“in”函数中指定的id的顺序相同根据函数中SQL内部的顺序对列进行排序,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个类似下面的查询,我希望返回的记录的顺序与在“in”函数中指定的id的顺序相同 SELECT * FROM table 1 where id in(12,6,4,3,13) 我可以单独使用sql来实现这一点,还是需要编写自己的排序函数。您可以使用CASE对记录进行自定义排序 SELECT * FROM table 1 where id in(12,6,4,3,13) ORDER BY CASE WHEN ID = 12 THEN 1 WHEN ID = 6
SELECT * FROM table 1 where id in(12,6,4,3,13)
我可以单独使用sql来实现这一点,还是需要编写自己的排序函数。您可以使用
CASE
对记录进行自定义排序
SELECT * FROM table 1 where id in(12,6,4,3,13)
ORDER BY CASE WHEN ID = 12 THEN 1
WHEN ID = 6 THEN 2
WHEN ID = 4 THEN 3
WHEN ID = 3 THEN 4
WHEN ID = 13 THEN 5
ELSE 6
END, ID
create table #tempID(idSort int identity(1,1), id int)
insert into #tempID(id)
select 12 union all
select 6 union all
select 4 union all
select 3 union all
select 13
select * from table t1
inner join #tempID t2
on t1.id = t2.id
order by t2.idSort
要动态创建排序表,需要此函数(或类似函数):
然后像这样加入:
declare @idList varchar(max)
set @idLIst = '12,6,4,3,13'
select * from table t1
inner join [dbo].[comma_sep_var_int](@idList) t2
on t1.id = t2.id
order by t2.idSort
现在还可以。但是我有自己的疑问,如果列表中的
不固定,那么我们可以根据列表进行排序吗?解决方案是可伸缩的吗?比如说100-10k ID?@AmitSingh那么你可以为此创建动态sql,或者在你的应用程序级别创建一条语句来生成条件排序。@thunderbird在
中列出10000项本身不是一个好主意。@thunderbird文档建议你应该将它们存储在一个表中。将它们插入具有两列的临时表或表值参数中id
和SortOrder
并在中加入而不是使用。然后你可以按第二列排序。如果你想让它动态,你可能需要一个函数。