2011-10-03 21 views
6

tengo una tabla como éstaObtener y ordenar filas con valor mayor que cero, entonces filas con valor cero

id title display_order 
1  t1  3 
2  t2  1 
3  t3  5 
4  t4  4 
5  t5  2 
6  t6  0 
7  t7  7 
8  t8  6 
9  t9  0 
10 t10  0 

Lo que necesito es tener resultados como este

id title display_order 
2  t2  1 
5  t5  2 
1  t1  3 
4  t4  4 
3  t3  5 
8  t8  6 
7  t7  7 
...order of the rest is not important but should be in the result 
6  t6  0 
9  t9  0 
10 t10  0 

puedo conseguir este resultado con dos consultas SQL y luego combinarlas.

¿Hay alguna manera de hacer esto con un SQL?

Gracias

Respuesta

15
SELECT * 
FROM atable 
ORDER BY 
    display_order = 0, 
    display_order 

Cuando display_order es 0, el primer término de clasificación, display_order = 0, evalúa a True, de lo contrario, se evalúa como False. True ordena después de False - por lo tanto, el primer criterio de clasificación se asegura de que las filas con display_order de 0 estén ordenadas al final de la lista.

El segundo término ORDER BY, display_order, especifica, además, el orden de las filas con valores de orden distintos de cero.

Por lo tanto, los dos criterios le dan la orden de clasificación deseada.

3

Pruebe el siguiente uno

SELECT * FROM table_name 
ORDER BY IF (display_order = 0, 9999999, display_order) 
1

Aquí está la solución de T-SQL en caso de que alguien lo necesita

SELECT * FROM Table ORDER BY CASE WHEN display_order = 0 THEN display_order END ASC,CASE WHEN display_order > 0 THEN display_order END ASC 
Cuestiones relacionadas