SQL Server使用IN()选择查询并按顺序排序

Joh*_*hnS 3 sql sql-server

我需要一个SELECT带有IN子句的查询,以及Order by:

select * 
from table 
where column_id IN (5,64,2,8,7,1) 
Run Code Online (Sandbox Code Playgroud)

此代码返回1, 2, 5, 7, 8, 64.

现在我需要按顺序返回相同的选择

输出需要是: 5, 64, 2, 8, 7, 1

在Mysql中,有字段选项,但SQL Server没有这样的字段选项.

Ull*_*las 7

使用您要在a中搜索的值Table Valued Constructor并提供行号,然后将其与表连接,然后根据表值构造函数中的值对其进行排序.

询问

SELECT t1.* 
FROM(VALUES(1, 5), (2, 64), (3, 2), (4, 8), (5, 7), (6, 1)) t2([rn], [id])
JOIN [your_table_name] t1
ON t1.[id] = t2.[id]
ORDER BY t2.[rn];
Run Code Online (Sandbox Code Playgroud)

您还可以使用要搜索的值创建表变量,并在其中创建标识列.然后加入你的桌子吧.

询问

DECLARE @tbl AS TABLE([rn] INT IDENTITY(1, 1), [id] INT);
INSERT INTO @tbl([id]) VALUES(5), (64), (2), (8), (7), (1);

SELECT t1.*
FROM [your_table_name] t1
JOIN @tbl t2
ON t1.[id] = t2.[id]
ORDER BY t2.[rn];
Run Code Online (Sandbox Code Playgroud)


DVT*_*DVT 2

在 SQL-Server 中,当您想要按某项排序时,您必须专门拼写出来。

尝试这个

select * from table where column_id IN (5,64,2,8,7,1)
order by
case column_id
    when 5 then 1
    when 64 then 2
    when 2 then 3
    when 8 then 4
    when 7 then 5
    when 1 then 6
    else 10
end;
Run Code Online (Sandbox Code Playgroud)