2012-02-27 15 views
6

Tengo una situación en la que necesito ordenar mis registros por su "estado" que se compone de una combinación de campos. Aquí hay un ejemplo de cómo debe devolver los resultados ordenados según la situación en orden ascendente:Orden de MySQL por múltiples declaraciones de casos

 |  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 

¿Cómo iba a crear una consulta de MySQL que ordenar estos registros por su "estado" en general?

+0

¿Cómo se calcula el "estado"? – Maciej

+0

"estado" es la combinación de enviado, recibido y aprobado. Entonces, los registros donde se envía es nulo deben ser los primeros, etc ... como en el ejemplo anterior. – Andrew

Respuesta

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

Recibo un error cada vez que trato de ordenar por una declaración de caso: 'Columna no encontrada: 1054 Columna desconocida 'CASE WHEN ... END' en 'order clause'' – Andrew

+0

@Andrew, Entonces agregaría el" case "a su declaración seleccionada como nombre de columna, asígnele un nombre de columna, como" como MyOrderCol "y haga que su orden por cláusula haga referencia a eso ... como" ordenar por MyOrderCol ". Si tiene un error con el CASO CUANDO, es probable porque los nombres de ejemplo que proporcionó no son las columnas reales en la tabla de origen, pero los nombres de columna de resultados con alias – DRapp

+0

moviendo la declaración de caso a la instrucción de selección parecieron solucionar el problema. – Andrew