有没有办法在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
此?
答案 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