在sql查询中禁用顺序

Flo*_* M. 3 sql sql-server

select HId, TestM, *
from TestDb
where Hid in ( 4, 5, 7, 9, 1, 132, 312)
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的.sql文件,默认情况下第一列将按升序排序.

我确实希望Hid列按照where子句中的值的顺序排列.我怎样才能做到这一点?

Hid | TestM | ...
_______________
4

5

7

9

1

132

312
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 7

您必须CASEORDER BY子句中使用表达式:

SELECT HId, TestM, *
FROM TestDb
WHEN Hid IN ( 4, 5, 7, 9, 1, 132, 312)
ORDER BY CASE Hid 
            WHEN 4 THEN 1
            WHEN 5 THEN 2
            WHEN 7 THEN 3
            WHEN 9 THEN 4
            WHEN 1 THEN 5
            WHEN 132 THEN 6
            WHEN 312 THEN 7
         END
Run Code Online (Sandbox Code Playgroud)

另请注意,表只是无序集,因此如果您将该ORDER BY子句保留,则无法保证结果集的顺序.