2013-09-05 3 views
1

Я пытаюсь написать SQLite запроса, который заказывает таблицу mytable во-первых, в колонке под названием status_id и во-вторых, в колонке под названием name, но с дополнительным ограничением использования:Сортировка SQL на основе двух полей и дополнительного ограничения

SELECT name, 
     status_id 
FROM mytable 
ORDER BY status_id, name 

создает таблицу, которая правильно сортируется.

например (имя, статус): («b», 1), («a», 2), («c», 2), («b», 3), («a», 4) ...

Однако мне нужен такой же вывод, но с любым результатом, имеющим status_id, равным 2, находясь в верхней части результатов.

например. ("А", 2), ("с", 2), ("б", 1), ("б", 3), ("а", 4) ...


Я придумал, но это не работает, как требуется, так как список также не subsorted по имени:

SELECT name, 
     status_id 
FROM mytable 
ORDER BY CASE status_id 
WHEN 2 THEN 0 ELSE 1 END DESC 
+0

+1 Вы показали нам, что вы устали до сих пор. – Parado

ответ

3

Вам по-прежнему необходимо сортировать по статусу и имени, ПОСЛЕ того, как вы сортируете по оператору CASE.

SELECT name 
     , status_id 
FROM mytable 
ORDER BY 
     CASE WHEN status_id = 2 THEN 1 ELSE 0 END DESC 
     ,status_id 
     ,name 
+0

А так близко! Сейчас имеет смысл –

2

Просто сортировать остальное по status_id и добавить name лет ваш ORDER BY:

SELECT name, status_id 
FROM mytable 
ORDER BY CASE status_id 
     WHEN 2 THEN -1 
     ELSE status_id 
     END, 
     name 
2

Просто добавьте status_id, name в конце:

SELECT name, status_id FROM mytable 
ORDER BY CASE status_id WHEN 2 THEN 1 ELSE 0 END DESC, status_id, name 
Смежные вопросы