在sqlite中自定义排序

时间:2011-01-10 03:56:00

标签: sql sqlite select sql-order-by

有没有办法在sqlite中通过查询获得自定义订单?

例如,我基本上有一个枚举

_id|Name|Key
------------
1 | One | Named
2 | Two | Contributing
3 | Three | Named
4 | Four | Key
5 | Five | Key
6 | Six | Contributing
7 | Seven | Named

'key'列有订购。说密钥>命名为>贡献。

有没有办法制作

SELECT * FROM table ORDER BY Key

返回

的效果
_id|Name|Key
------------
4 | Four | Key
5 | Five | Key
1 | One | Named
3 | Three | Named
7 | Seven | Named
2 | Two | Contributing
6 | Six | Contributing

此?

3 个答案:

答案 0 :(得分:9)

  SELECT _id, Name, Key 
    FROM my_table t 
ORDER BY CASE WHEN key = 'Key' THEN 0 
              WHEN key = 'Named' THEN 1 
              WHEN key = 'Contributing' THEN 2 END, id;

答案 1 :(得分:2)

如果您有很多CASE(或一组复杂的条件),Adam的解决方案可能会导致极大的查询。

SQLite允许您编写自己的函数(在C ++中)。你可以写一个函数来返回类似于Adam的方式,但是因为你使用的是C ++,你可以使用更大的条件集(或者单独的表等)。

编写函数后,您可以在SELECT中引用它,就像它是内置函数一样:

SELECT * FROM my_table ORDER BY MyOrder(Key)

答案 2 :(得分:0)

你有没有尝试过(没有在我身边进行过测试,但依赖于我之前使用过的技术):

ORDER BY KEY = "Key" DESC,
         KEY = "Named" DESC,
         KEY = "Contributing" DESC