SQL OrderBy 使用 In() 查询时

Lia*_*amB 4 sql-server

示例查询

SELECT * FROM Table WHERE ID in (5,3,4)
Run Code Online (Sandbox Code Playgroud)

如何调整此查询,以便返回条目的顺序遵循 ID 的输入(IE,第 5 个,第 3 个,第 4 个)。

编辑 - 清除 ID 是一个按正确顺序动态生成的列表。

Ken*_*her 7

最好的办法是将列表拆分为临时表。

我正在使用 Jeff Moden 的 DelimitedSplit8k。您可以在此处找到代码。请注意,它包含一个 ItemNumber 列,该列是按顺序排列的值。

DECLARE @DelimString varchar(50) = '4,5,3'

SELECT * INTO #DelimList FROM dbo.DelimitedSplit8k(@DelimString,',')

SELECT Table.*
FROM Table
JOIN #DelimList
    ON Table.Id = #DelimList.Item
ORDER BY #DelimList.ItemNumber
Run Code Online (Sandbox Code Playgroud)

对于分隔列表中的大量值,这具有更快的额外好处。