如果我有一张桌子...
ThingName | ThingCategory
-------------------------
thing 1 | cat1
thing 2 | cat2
thing 3 | cat3
我将如何选择它们按 first cat2
, then cat1
, then排序cat3
这甚至可能吗?
order 子句中的 switch 是一种仅使用代码即可到达那里的方法:
select *
from Things
order by case
when ThingCategory = 'cat2' then 1
when ThingCategory = 'cat1' then 2
when ThingCategory = 'cat3' then 3
else 4 -- Might want the default case, too
end
但是,这种类型的功能通常由数据而不是代码更好地处理。例如,如果您有一个ThingCategories
表,该表可以有一个Ordinal
整数列。此时,您可以简单地进行以下查询:
select t.*
from Things t
join ThingCategories c on t.ThingCategory = c.ThingCategory
order by c.Ordinal
这样您就不必在代码中维护文字(祝您好运),并且用户可以通过简单地更新表中的序数来更改顺序(无需打扰您)。
这是完全可能的。只需通过比较订购:
ORDER BY
ThingCategory = "cat2" DESC,
ThingCategory = "cat1" DESC,
ThingCategory = "cat3" DESC
你可以这样做
SELECT ThingName , ThingCategory
FROM yourtabe
ORDER BY
CASE
WHEN ThingCategory = 'cat2' THEN 1
WHEN ThingCategory = 'cat1' THEN 2
WHEN ThingCategory = 'cat3' THEN 3
END