Bil*_*ill 3 sql t-sql sql-server sql-server-2008
我有一个查询返回记录状态列.记录状态列有几个值,如:"活动","已删除"等...
我需要通过"Active",然后"Deleted",然后等来订购结果......
我目前正在创建CTE,然后将每组记录带到UNION ALL.是否有更好,更动态的方式来完成查询?
谢谢,
你可以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)
有关更多状态值,您可以执行以下操作:
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)
| 归档时间: |
|
| 查看次数: |
4567 次 |
| 最近记录: |