TSQL Order By - 硬编码值列表

Bil*_*ill 3 sql t-sql sql-server sql-server-2008

我有一个查询返回记录状态列.记录状态列有几个值,如:"活动","已删除"等...

我需要通过"Active",然后"Deleted",然后等来订购结果......

我目前正在创建CTE,然后将每组记录带到UNION ALL.是否有更好,更动态的方式来完成查询?

谢谢,

Joh*_*Woo 5

你可以CASE在这里使用

ORDER BY CASE WHEN Status = 'Active' THEN 0 ELSE 1 END ASC
Run Code Online (Sandbox Code Playgroud)

但是如果你有更多的值status并且你想排序Active那么DELETE

ORDER BY CASE WHEN Status = 'Active'  THEN 0 
              WHEN Status = 'Deleted' THEN 1
              ELSE 2 
         END ASC
Run Code Online (Sandbox Code Playgroud)


Mah*_*mal 5

有关更多状态值,您可以执行以下操作:

WITH StatusOrders
AS
(
  SELECT StatusOrderID, StatusName
  FROM (VALUES(1, 'Active'), 
              (2, 'Deleted'),
              ...
              n, 'last status')) AS Statuses(StatusOrderID, StatusName)
)
SELECT *
FROM YourTable t
INNER JOIN StatusOrders s ON t.StatusName = s.StatusName
ORDER BY s.StatusOrderID;
Run Code Online (Sandbox Code Playgroud)