我有这样的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)它可以被索引,从而可以消除查询计划中的排序操作。 –