Jes*_*per 1 sql-server sql-order-by
我有一个表,其中status可以是GOLD,SILVER,ACTIVE或INACTIVE.
我想按顺序排序......按顺序排序,然后选择顶级X.如何在查询中编写?
目前我填写列表首先查询GOLD然后检查列表的大小,然后查询SILVER并再次检查大小等.
Mit*_*eat 13
SELECT TOP X *
FROM myTable
ORDER BY
CASE
WHEN Status = 'GOLD' THEN 4
WHEN Status = 'SILVER' THEN 3
WHEN Status = 'ACTIVE' THEN 2
WHEN Status = 'INACTIVE' THEN 1
END DESC
Run Code Online (Sandbox Code Playgroud)
如果你是好人,你应该把它归结为一个单独的表:
statusvalues
id displaytext sortorder
1 GOLD 10
2 SILVER 20
3 ACTIVE 30
4 INACTIVE 40
Run Code Online (Sandbox Code Playgroud)
然后将id作为状态值存储在主表上.从主表加入到此表,获取displaytext和sortorder,并进行适当的排序.
注意1我在排序顺序中留下间隙,因此如果你必须插入另一个,你可以把它放在例如15而不必改变任何其他值.注意2这意味着,如果您的客户决定"GOLD"现在应显示为"PREMIUM",则更改1个数据项值,并且您的代码保持不变.可能会节省你很多时间......!但这可能是过度的 - 由你来评估.