2012-09-19 9 views

Odpowiedz

17

Czy to zadziała?

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

Jestem trochę zdezorientowany twoim słowem "wszystkie kolumny NULL ostatnie". Jeśli chcesz, aby wszystkie wartości NULL ostatnich w danej kolumnie, użyj tego:

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

Czy nie oznacza 'nie ponosi NULL'? – dan04

+0

@ dan04 thx, masz rację – mvds

+3

Myślę, że powinno być 'IS NULL', aby uzyskać ostatnie wartości zerowe: – Blorgbeard

4

można zrobić coś takiego udawać:

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

dlaczego nie 'order by case, gdy ordercol ma wartość null, a następnie 0 else 1, ordercol'? ratuje dziwny błąd, gdy ktoś stawia wartości poniżej -100 w ordercol. – mvds

+0

To dobra uwaga. Właśnie napisałem niewyraźny przykład z mojej głowy, ponieważ nie wiemy, jak dane wyglądają. Ale twoja korekcja działa lepiej - zastosowała to! – Blorgbeard

15

Chociaż trochę jak odpowiedź Blorgbeard, ten wariant nie robi” t dbać o dostarczanie prawidłowej "fałszywej" wartości właściwego typu danych.

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

Alternatywnie, nawet jeśli chciał użyć fałszywe wartości, wolałbym ISNULL!

ORDER BY ISNULL(SOMECOL,-9999) 

Jak zauważył Michael, SQLite używa IFNULL. Możesz również użyć uniwersalnej wersji ANSI-SQL COALESCE.

+0

Drobna korekta Myślę, że ... w SQLite, ISNULL powinno być IFNULL. – Michael

+0

Dzięki @Michael, zaktualizowany o lepsze informacje – RichardTheKiwi

2

Wpadłem na ten sam problem. I okazało się to może działać:

(nie mogę znaleźć żadnego isnull funkcję SQLite)

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