2010-05-13 15 views

risposta

19

non bella, ma dovrebbe funzionare:

... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc 
+2

Ovviamente si dovrebbe fare lo stesso per ciascuna delle altre variabili. –

+11

+1. Rendiamolo più brutto: 'ORDER BY COALESCE ((NOT bool_field) :: INTEGER * 2, 1)'. :) – pilcrow

+0

ERRORE: La funzione isnull (boolean) non esiste – petehern

14

Una soluzione migliore sarebbe quella di utilizzare

f1 DESC NULLS LAST

se stai bene con l'ordine vero, falso, nullo (immagino la parte importante della tua domanda era, come nella mia situazione attuale, quella di avere i vaule non corretti insieme)

https://stackoverflow.com/a/7621232/1627888

+0

Mentre questo è utile, non risponde alla domanda, poiché ci sono casi in cui si vuole veramente 'null' tra' true' e 'false'. – oulenz

2

si potrebbe fare anche nel seguente modo:

order by coalesce(f1, FALSE), coalesce(f1, TRUE), ... 

Se f1 è TRUE, si ottiene: TRUE, TRUE
Se f1 è NULL, si ottiene: FALSE, TRUE
Se f1 è FALSE, si ottiene: FALSE, FALSE

che corrisponde all'ordine di ordinamento desiderato.

Problemi correlati