2009-12-10 14 views
9

Ho una query MySql che mi ordina i risultati per colonna no (int, può essere null). Esempio semplice:SQL ORDER di `no` con NULL alla fine

SELECT * FROM table ORDER BY no ASC

Mi piacerebbe avere un gruppo di risultati allineati come

1, 2, 3, 10, 52, 66, NULL, NULL, NULL

ma ottengo

NULL, NULL, NULL, 1, 2, 3, 10, 52, 66

E 'possibile con query SQL?

risposta

24

Puoi provare questo?

ORDER BY ISNULL(no),no; 
+0

Perché non solo "ORDER BY ISNULL (no), no;"? ISNULL restituisce già 1 se null o 0 se non lo è. – OMA

+0

Sì, dovrebbe essere, sono corretto! – YOU

1

Ok, penso che ho capito:

SELECT * FROM table WHERE no IS NOT NULL ORDER BY no ASC UNION
SELECT * FROM table WHERE no IS NULL

O c'è un modo migliore?

+0

che funziona troppo :) –

+0

Ma con complicate interrogazione - pochi 'JOIN's sarà spaventato. :) – hsz

2
SELECT * FROM table ORDER BY COALESCE(no,999999) ASC 

Basta sostituire il 999999 con qualcosa di più grande se i tuoi numeri sono naturalmente più grandi di così.

+0

Cattivo quando il mio 'no' raggiunge' 999999 + 1'. – hsz

4

È possibile utilizzare un'istruzione CASE di modificare l'ordinazione:

SELECT * 
FROM table 
ORDER BY case when no is null then 2 else 1 end, no 

Questa ordini su "nullableness" prima, e no secondo.

2
SELECT * FROM table ORDER BY ISNULL(field), field ASC; 
+0

Penso che questa sia la migliore risposta per la sua semplicità – OMA

+0

Bene, ora che l'utente "TU" ha cambiato la sua risposta, la risposta accettata ora è buona come questa;) – OMA

Problemi correlati