2010-03-23 20 views
14

tengo la prueba siguiente código:orden de clasificación SQL con valores nulos últimos

CREATE TABLE #Foo (Foo int) 

INSERT INTO #Foo SELECT 4 
INSERT INTO #Foo SELECT NULL 
INSERT INTO #Foo SELECT 2 
INSERT INTO #Foo SELECT 5 
INSERT INTO #Foo SELECT 1 

SELECT * FROM #Foo 
ORDER BY 
    CASE WHEN Foo IS NULL THEN Foo DESC ELSE Foo END 

DROP TABLE #Foo 

Estoy tratando de producir el siguiente resultado:

 
1 
2 
3 
4 
5 
NULL 

"Si nulo, puesto que la última"

¿Cómo se hace eso utilizando SQL 2005

/M

Respuesta

19

Una forma es a solucionar el problema de esta manera:

ORDER BY 
(CASE WHEN Foo IS NULL THEN 1 ELSE 0 END), Foo 

O: primero ordenar por nulo, a continuación, ordenar por el contenido de Foo.

3

También puede hacer

SELECT * FROM #Foo ORDER BY COALESCE(Foo, 2147483647) 

que sustituirá NULL con el mayor int posible para los fines de la clasificación solamente (así que dejar los valores retured solo) y así desviar a la parte posterior de cualquier orden.

+0

Er, downvote why snaps? Marque esto si lo desea, hace exactamente lo que pidió el póster y es tan eficiente como la otra solución publicada por menos código. – eftpotrm

+3

Dejando a un lado cualquier otra cuestión, esto tiene los inconvenientes de conocer el "valor máximo" (y garantizar que no se use realmente para otra cosa). –

Cuestiones relacionadas