2015-11-17 3 views
0

У меня есть запрос в PostgreSQL, который возвращает:Укажите порядок для запроса вручную

id  operation quantity date 
---------------------------------------- 
1282 WITHDRAW  20 2015-01-01 
541  INCOMING  50 2015-01-01 
4788 ACCEPT  17 2015-01-01 
4789 ACCEPT  20 2015-01-01 
..... 

Порядок запроса сортировать записи по date ...

Однако, я хочу сделать дополнительный заказ operation : сначала INCOMING, затем ACCEPT, затем WITHDRAW. Заказ между записями той же операции, не важно:

541  INCOMING  50 2015-01-01 
4788 ACCEPT  17 2015-01-01 
4789 ACCEPT  20 2015-01-01 
1282 WITHDRAW  20 2015-01-01 

или

541  INCOMING  50 2015-01-01 
4789 ACCEPT  20 2015-01-01 
4788 ACCEPT  17 2015-01-01 
1282 WITHDRAW  20 2015-01-01 

как хорошо.

Я не могу использовать operation столбец, ни id колонки, так как это не даст желаемого результата ...

Select ... 
from ... 
where ... 
order by date 

Как можно вручную задать порядок, я хочу ..?

Я ищу синтаксис SQL-то вроде:

order by date, (operation order by: INCOMING,ACCEPT,WITHDRAW) 
+0

Возможный дубликат [Postgresql: Заказ столбцов в соответствии пользовательских критериев] (http://stackoverflow.com/questions/14713798/postgresql-ordering-columns-to-match-custom-criteria) или http://stackoverflow.com/questions/6332043/sql-order-by-multiple-values-in -специальный-порядок –

ответ

4

Используйте выражение для заказа по:

order by date, 
     case operation 
       when 'INCOMING' then 1 
       when 'ACCEPT' then 2 
       when 'WITHDRAW' then 3 
       else 4 -- this is a fallback, anything else will be sorted at the end 
     end 
+0

Вы были быстры в этом! +1 –

Смежные вопросы