2011-01-10 76 views
3

有没有办法在sqlite中查询自定义顺序?在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 

和“关键”列有顺序。说键>命名>贡献。

有没有一种方法,使

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 

这个效果?

+0

的可能的复制[SQLite和由客户订单(https://stackoverflow.com/questions/3303851/sqlite-and-custom-顺序) – 2017-11-18 17:32:14

回答

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; 
2

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

SQLite允许你编写自己的函数(用C++)。你可以编写一个函数来返回与Adam相似的值,但是因为你使用的是C++,你可以使用更多的条件(或者单独的表格等)。

一旦函数编写,你可以参考它在你的选择,就好像它是一个内置功能:

SELECT * FROM my_table的ORDER BY MyOrder(密钥)

+0

这实际上是在Android上。你知道这对于android来说可能吗? – Falmarri 2011-01-18 16:41:36

0

你有没有尝试(未测试在我的一边,但依赖于技术我先前使用的):

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