3

如果我有一张桌子...

ThingName | ThingCategory
-------------------------
thing 1   | cat1
thing 2   | cat2
thing 3   | cat3

我将如何选择它们按 first cat2, then cat1, then排序cat3

这甚至可能吗?

4

3 回答 3

9

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

这样您就不必在代码中维护文字(祝您好运),并且用户可以通过简单地更新表中的序数来更改顺序(无需打扰您)。

于 2012-11-01T19:51:29.260 回答
2

这是完全可能的。只需通过比较订购:

ORDER BY
  ThingCategory = "cat2" DESC,
  ThingCategory = "cat1" DESC,
  ThingCategory = "cat3" DESC
于 2012-11-01T19:51:10.847 回答
1

你可以这样做

SELECT ThingName , ThingCategory
    FROM yourtabe
    ORDER BY 
     CASE
        WHEN ThingCategory = 'cat2' THEN 1
        WHEN ThingCategory = 'cat1' THEN 2
        WHEN ThingCategory = 'cat3' THEN 3
    END
于 2012-11-01T19:52:23.940 回答