SQL Server按不同的值排序

Jes*_*per 1 sql-server sql-order-by

我有一个表,其中status可以是GOLD,SILVER,ACTIVEINACTIVE.

我想按顺序排序......按顺序排序,然后选择顶级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)


Vin*_*Roe 5

如果你是好人,你应该把它归结为一个单独的表:

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个数据项值,并且您的代码保持不变.可能会节省你很多时间......!但这可能是过度的 - 由你来评估.