2012-09-19 10 views

risposta

17

potrebbe funzionare?

SELECT ....... ORDER BY COALESCE(col1,col2,col3,etc) IS NULL 

Sono un po 'confuso dal testo "tutte le colonne NULL durano". Se si desidera che tutti i valori NULL ultimi in una determinata colonna, utilizzare questo:

SELECT ....... ORDER BY col1 IS NULL 
+0

Non lo dire 'NON null'? – dan04

+0

@ dan04 thx, hai ragione – mvds

+3

Penso che dovrebbe essere "IS NULL" per ottenere i null ultimi :) – Blorgbeard

4

si può fare qualcosa di simile ad esso falso:

select * from test 
order by case ordercol when null then 1 else 0 end, ordercol 
+0

perché non ordinare per caso quando ordercol è nullo, quindi 0 else 1, ordercol'? salva un bug strano quando qualcuno inserisce valori sotto -100 in ordercol. – mvds

+0

Questo è un buon punto. Ho appena scritto un esempio vago in cima alla mia testa perché non sappiamo come appaiono i dati. Ma la tua correzione funziona meglio in generale - applicata! – Blorgbeard

15

Mentre un po 'come la risposta di Blorgbeard, questa variante doesn' t cura di fornire un valore "falso" valido del giusto tipo di dati.

ORDER BY CASE WHEN SOMECOL IS NULL THEN 1 ELSE 0 END, SOMECOL 

In alternativa, anche se si voleva utilizzare un valore falso, preferirei ISNULL!

ORDER BY ISNULL(SOMECOL,-9999) 

Come ha osservato Michael, SQLite utilizza IFNULL. È possibile utilizzare anche la versione universale ANSI-SQL COALESCE.

+0

Correzione minore Penso che ... in SQLite, ISNULL dovrebbe essere IFNULL. – Michael

+0

Grazie @ Michael, aggiornato con informazioni migliori – RichardTheKiwi

2

Mi sono imbattuto nello stesso problema. ho scoperto questo potrebbe funzionare:

(non ho trovato alcuna funzione isnull per SQLite)

order by ifnull(column_what_you_want_to_sort,'value in case of null')