2012-02-27 2 views
6

У меня есть ситуация, когда мне нужно сортировать свои записи по их «статусу», который состоит из комбинации полей. Вот пример того, как он должен возвращать результаты, отсортированные по статусу в порядке возрастания:Порядок MySQL по нескольким операторам case

 |  Sent  Received   Approved 
-------------------------------------------------- 
record1 |  null  null    null 
record2 | 2012-01-01  null    null 
record3 | 2012-01-01 2012-01-01   null 
record4 | 2012-01-01 2012-01-01  2012-01-01 

Как создать запрос MySQL, который будет заказывать эти записи по их общему «статус»?

+0

Как Вы оцениваете "статус"? – Maciej

+0

«статус» - это комбинация отправленных, полученных и одобренных. Таким образом, записи, где отправлено, являются нулевыми, должны быть первыми и т. Д. ... как пример выше. – Andrew

ответ

11
order by 
    case when sent is null and received is null and approved is null then 1 
     when received is null and approved is null then 2 
     when approved is null then 3 
     else 4 end 
+1

Я получаю сообщение об ошибке, когда я пытаюсь заказать оператор case: 'Column not found: 1054 Unknown column 'CASE WHEN ... END' in 'order clause'' – Andrew

+0

@Andrew, Тогда я бы добавил« случай » "в ваш оператор select в качестве имени столбца, дайте ему имя столбца, например« как MyOrderCol », и укажите свой порядок order by ..., например« order by MyOrderCol ». Если у вас возникла ошибка с CASE WHEN, возможно, потому, что имена примеров, которые вы предоставили, не являются фактическими столбцами в исходной таблице, но имена псевдонимов результатов с именами – DRapp

+0

, перемещающие оператор case в оператор select, по-видимому, устраняют проблему. – Andrew

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