2009-08-28 14 views

Respuesta

19

¿qué pasa con algo como esto:

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY (case when number is null then 0 else 1 end), id 

Si el número es NULL, la primera orden por criterios será 0; 1 persona
Lo que significa que cada línea será NULL Número vendrá antes que los demás los

Y tenga en cuenta que los identificadores de los objetos se ordenan también, de todos modos.

Usted obtendrá algo como esto:

  • null; id = 1
  • número null; id = 2
  • número null; id = 5
  • número null; id = 8
  • número no nulo; id = 3
  • número no nulo; id = 4
  • número no nulo; id = 7
  • número no nulo; id = 10
  • número no nulo; id = 12
+0

Así es como normalmente lo hago también. – RiddlerDev

+0

¡Excelente! Respuesta rápida, y funcionó la primera vez que lo intenté. ¡Gracias! – Johan

+0

De nada :-) diviértete! –

-1

Unión podría ser utilizada también.

SELECT id, number 
FROM Media 
WHERE user = 10 AND number IS NULL 
ORDER BY id 

UNION 

SELECT id, number 
FROM Media 
WHERE user = 10 AND number IS NOT NULL 
ORDER BY id, number; 
+0

Aparte de una sintaxis ligeramente incorrecta (paréntesis faltantes), esto no tendrá sentido porque 'UNION' no garantizará la preservación del orden de las selecciones individuales. Además, esto produce un plan de ejecución innecesariamente caro (dos controles 'NULL' en la columna' number'). –

1

La función ISNULL() devuelve 1 si el parámetro es nulo y 0 en caso contrario.

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY ISNULL(number) DESC, id 

Eso sí, terrible para el rendimiento en función de cuántos valores que necesita para ordenar: no Indice será utilizada en base al orden por columnas.

Cuestiones relacionadas