Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据函数中SQL内部的顺序对列进行排序_Sql_Sql Server_Tsql - Fatal编程技术网

根据函数中SQL内部的顺序对列进行排序

根据函数中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

我有一个类似下面的查询,我希望返回的记录的顺序与在“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 THEN 2
              WHEN ID = 4 THEN 3
              WHEN ID = 3 THEN 4
              WHEN ID = 13 THEN 5
              ELSE 6
         END, ID

用您的ID创建一个表,然后加入到表中,按另一个标识列排序

假设您有10k id,则不会手动输入它们,因此prehaps能够以不同的方式构建排序/联接表。也应该比在

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
并在中加入而不是使用
。然后你可以按第二列排序。如果你想让它动态,你可能需要一个函数。