сделать ноль последним в списке возрастающих номеров - PullRequest
3 голосов
/ 13 июля 2010

Я использую SQLite в приложении для Android.
Во всех моих таблицах у меня есть строка по умолчанию с индексом 0, который содержит значения по умолчанию для этой таблицы.
В большинстве случаев номер по умолчанию для каждого поля равен 0, и это лучший номер для использования.
Однако, когда я сортирую свои данные, используя инструкцию ORDER BY, я хочу, чтобы все мои поля с нулевым значением помещались в конец списка, поскольку они обычно пусты и используют информацию по умолчанию.
Исключение этих полей в операторе where недопустимо, поскольку я пытаюсь сортировать информацию, а не фильтровать ее.

Вот что у меня есть:

select distinct item.name, epoch_date.epoch
from epoch_date, time
where (time.begin_date_id = epoch_date._id)
and (item.time_id = time._id)
order by epoch_date.epoch;

В моей базе данных песочницы это возвращает что-то вроде:

"item 1", 0
"item 2", 0
"item 4", 0
.
.
.
"item 3",  1275350400
"item 42", 1275472800
"item 12", 1275472800

Но я хочу вот что:

"item 3",  1275350400
"item 42", 1275472800
"item 12", 1275476400
.
.
.
"item 1", 0
"item 2", 0
"item 4", 0

Ответы [ 5 ]

10 голосов
/ 13 июля 2010

Эквивалентно предложению CASE, но короче:

 ORDER BY epoch_date.epoch == 0, epoch_date.epoch
4 голосов
/ 13 июля 2010

Попробуйте это:

ORDER BY
    CASE epoch_date.epoch WHEN 0 THEN 1 ELSE 0 END,
    epoch_date.epoch

Я не тестировал в SQLite, но работает во многих других базах данных, так что, надеюсь, он будет работать и в SQLite.

0 голосов
/ 13 июля 2010

упорядочить по декодированию (epoch_date.epoch, 0, null, epoch_date.epoch)

вы можете использовать что-то вроде этого ... так как в конце по возрастанию в конце сохраняются нулипорядок.если у вас есть функция декодирования, доступная в sqlite..или иначе вы можете просто использовать вместо нее оператор case.

Рави Кумар

0 голосов
/ 13 июля 2010

Можете ли вы добавить дополнительный столбец в качестве фильтра, а затем отсортировать по обоим столбцам?

select (...)epoch_date.epoch, case epoch_date.epoch when 0 then 1 else 0 as default
(...)
order by default,epoch_date.epoch
0 голосов
/ 13 июля 2010

Я не совсем уверен, разрешает ли SQLite операторы case в "order by", но попробуйте что-то вроде этого:

order by case epoch_date.epoch when 0 then 999999 else epoch_date.epoch end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...