我有一张表格status
可以是GOLD
,SILVER
,ACTIVE
或INACTIVE
。
我想按顺序排序......按顺序排序,然后选择顶级X.如何在查询中写出来?
目前我填写的是一个列表,首先查询GOLD
,然后检查列表的大小,然后查询SILVER
并再次检查大小等。
答案 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