我有這樣的SQL Server表:如何在SQL Server中以預定義的順序獲取行?
MenuID MenuName MenuColor
---------------------------------------
10 Daily Tickets Gray
15 Kids Ticket Dark Pink
20 Group Discount Dark Ash
11 Discount ticket Brown
17 Referral Ticket Beige
22 Frequent visitor Musturd
27 Annual Pass sky blue
25 Kids Pass Pink
24 free Ticket Yellow
這個表有很多記錄和多個列太..
期望的結果 - 前四個菜單應以預先定義的順序排序(其中我在試用查詢提到)和剩餘應在MENUNAME列排序ASC
所需的結果集:
MenuID MenuName MenuColor
---------------------------------------
10 Daily Tickets Gray
27 Annual Pass sky blue
22 Frequent visitor Musturd
20 Group Discount Dark Ash
11 Discount ticket Brown
24 free Ticket Yellow
25 Kids Pass Pink
15 Kids Ticket Dark Pink
17 Referral Ticket Beige
這是我爲此嘗試的查詢:
SELECT *
FROM tMenus m
ORDER BY
(CASE m.MenuName
WHEN 'Daily Tickets' THEN 1
WHEN 'Annual Pass' THEN 2
WHEN 'Frequent visitor' THEN 3
WHEN 'Group Discount' THEN 4
END), m.MenuName ASC;
但是,這並沒有返回我想要的結果。請糾正我錯在哪裏。
感謝
爲什麼不簡單地添加一個「Dis playOrder「列到表中? –
你的意思是優先嗎?哪一個更推薦解決方案?我需要爲每一行定義優先權? – Lina
我的首選是添加列並設置每一行的值。 1)它使排序正確的一個非常簡單的任務。 2)它有助於在多個查詢中提供一致性(無需繼續反覆查看案例表達式,並且可能將其搞砸)。 3)在查看這些值時,告訴未來發展組織有一個排序偏好。 4)它可以被索引,從而可以消除查詢計劃中的排序操作。 –