SQL Server按不同的值排序

时间:2011-07-31 11:09:48

标签: sql-server sql-order-by

我有一张表格status可以是GOLDSILVERACTIVEINACTIVE

我想按顺序排序......按顺序排序,然后选择顶级X.如何在查询中写出来?

目前我填写的是一个列表,首先查询GOLD,然后检查列表的大小,然后查询SILVER并再次检查大小等。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

如果你表现得很好,你应该把它归结为一个单独的表:

statusvalues
id   displaytext sortorder
1    GOLD        10
2    SILVER      20
3    ACTIVE      30
4    INACTIVE    40

然后将id存储为主表上的状态值。从主表加入到此表,获取displaytext和sortorder,并进行适当的排序。

注意1我在排序顺序中留下了空白,所以如果你必须插入另一个,你可以把它放在例如15,无需更改任何其他值。 注意2这意味着,如果您的客户决定“GOLD”现在应显示为“PREMIUM”,则更改1个数据项值,并且您的代码保持不变。可能会节省你很多时间......! 但这可能是过度的 - 由你来评估。

答案 2 :(得分:-1)

这可能对某人有所帮助。假设您有一个表(MyTable),其中一列(StatusTypeID)作为“StatusTypes”表中的外键。您可以实现一个程序来进行动态排序。

CREATE PROCEDURE DynamicSort(@SortOrder int)   
AS
BEGIN

SELECT * FROM MyTable
ORDER BY
CASE WHEN StatusTypeID = @SortOrder then 1
END 

DESC

END
--  exec  DynamicSort 7