2015-11-10 5 views
0

Я пытаюсь заказать свою таблицу двумя паразитами, один из которых - это «статус», где у меня есть отлично работающий порядок CASE, а второй столбец «ID», где я просто хочу заказать результаты дел по их идентификатору таблицы, чтобы иметь новейший результат сверху в отсортированном случае.SQL ORDER BY CASE + ORDER BY ID DESC

Thats мой текущий запрос:

SELECT ID, status 
FROM omv_tabelle 
ORDER BY CASE 
WHEN status = 'ANMELDUNG' THEN '1' 
WHEN status = 'KUNDE' THEN '2' 
WHEN status = 'OMV_ANTRAG' THEN '3' 
WHEN status = 'ABLEHNUNG' THEN '4' END ASC, 
ID DESC 

Я понятия не имею, как добавить идентификатор в этой сортировкой, а не разрушать дела funktionality

мой выходной ток выглядит следующим образом:

407 KEIN_INTERESSE 
406 KEIN_INTERESSE 
405 KEIN_INTERESSE 
397 KEIN_INTERESSE 
396 KEIN_INTERESSE 
411 ANMELDUNG 
1 ANMELDUNG 
6 KUNDE 
5 KUNDE 
4 KUNDE 
3 KUNDE 
2 KUNDE 
394 ABLEHNUNG 
393 ABLEHNUNG 
392 ABLEHNUNG 
391 ABLEHNUNG 
390 ABLEHNUNG 

Таким образом, порядок статусов неверен:/

It shoul Б:

411 ANMELDUNG 
1 ANMELDUNG 
6 KUNDE 
5 KUNDE 
4 KUNDE 
3 KUNDE 
2 KUNDE 
394 ABLEHNUNG 
393 ABLEHNUNG 
392 ABLEHNUNG 
391 ABLEHNUNG 
390 ABLEHNUNG 
407 KEIN_INTERESSE 
406 KEIN_INTERESSE 
405 KEIN_INTERESSE 
397 KEIN_INTERESSE 
396 KEIN_INTERESSE 
+1

Смотрите отредактированный ответ. Если он все еще не удовлетворяет вам, тогда объясните, что не так с вашим заказом ... –

+1

Каждый пояснитель должен быть объяснен. Я представил подробный вопрос с моим текущим исходом. –

+1

Нет нисходящего от меня. Просто замечание: запрос и вывод не совпадают. «KEIN_INTERESSE» наступит последним, потому что он получит неявный ключ сортировки NULL. Я полагаю, что у вас все еще есть статус «ELSE», который сначала получит «KEIN_INTERESSE», потому что Oracle рассматривает «1»> «K». (И статус «1 x ABGELEHNT» будет находиться между «1» и «2». Плохая идея создать ключ сортировки для некоторых статусов и использовать статус как ключ сортировки для остальных :-) Это просто что происходит. Как это сделать правильно показано в ответе Гиорги Накэури. –

ответ

5

Сортировка ID desc после case statement. Я не понимаю вашего akhtungs, но это зависит от вашего выхода образца:

SELECT * 
FROM omv_tabelle 
ORDER BY CASE 
       WHEN status = 'open' THEN 1 
       WHEN status = 'pending' THEN 2 
       WHEN status = 'closed' THEN 3 END, 
     ID DESC 

EDIT:

SELECT ID, status 
FROM omv_tabelle 
ORDER BY CASE 
       WHEN status = 'ANMELDUNG' THEN 1 
       WHEN status = 'KUNDE' THEN 2 
       WHEN status = 'OMV_ANTRAG' THEN 3 
       WHEN status = 'ABLEHNUNG' THEN 4 
       ELSE 5 END ASC, 
     status, 
     ID desc 
+0

Он заказывает «открытые», «завитушки» и «закрыты» отлично по ID среди них, но, к сожалению, весь пакет теперь не сортирован. В моем примере у меня есть 5 общих значений состояния, и они не выводятся, как написано в операторах when. Позвольте мне быстро обновить свой вопрос. –

+0

Хорошо, укажите пример вывода и объясните, что не так с заказом. –

+0

Это, кажется, отлично работает –