Индивидуальный заказ в sqlite - PullRequest
3 голосов
/ 10 января 2011

Есть ли способ создать пользовательский заказ по запросу в 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' имеют порядок.Скажите Key> Named> Contributing.

Есть ли способ заставить

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

this

Ответы [ 3 ]

9 голосов
/ 10 января 2011
  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 голосов
/ 18 января 2011

Если у вас много CASE (или сложного набора условий), решение Адама может привести к очень большому запросу.

SQLite позволяет вам писать свои собственные функции (на C ++).Вы можете написать функцию, которая будет возвращать значения, аналогично тому, как это делает Адам, но поскольку вы используете C ++, вы можете работать с гораздо большим набором условий (или отдельной таблицей и т. Д.).

После того, как функциянаписано, вы можете ссылаться на него в вашем SELECT, как если бы это была встроенная функция:

SELECT * FROM my_table ORDER BY MyOrder (Key)

0 голосов
/ 18 ноября 2017

Вы пробовали (не проверял на моей стороне, но полагался на технику, которую я ранее использовал):

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