2009-12-10 16 views
9

Mam zapytanie MySql, które zleca mi wyniki przez no kolumnę (int, może być pusta). Prosty przykład:Kolejność SQL według `no` z NULL na końcu

SELECT * FROM table ORDER BY no ASC

chciałbym uzyskać resultset klasyfikowane jak

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

ale mam

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

Czy to możliwe z kwerendy SQL?

Odpowiedz

24

Czy możesz spróbować?

ORDER BY ISNULL(no),no; 
+0

Dlaczego nie po prostu "ZAMÓW JUŻ NIE (nie), nie;"? ISNULL zwraca już wartość 1, jeśli jest pusta lub 0, jeśli nie. – OMA

+0

Tak, powinienem, ja się poprawiam! – YOU

1

Ok, myślę, że mam to:

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

czy jest jakiś lepszy sposób?

+0

To działa też :) –

+0

Ale ze skomplikowanego zapytania - kilku 'JOIN's będzie przestraszony. :) – hsz

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

Po prostu zamień 999999 na większy, jeśli twoje liczby są naturalnie większe.

+0

Źle, gdy moje 'nie' osiąga' 999999 + 1'. – hsz

4

Można użyć CASE oświadczenie podkręcić zamawiania:

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

This Zamówienia na "nullableness" pierwszy i no sekundę.

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

Myślę, że jest to najlepsza odpowiedź ze względu na swoją prostotę. – OMA

+0

Cóż, teraz, gdy użytkownik "TY" zmienił swoją odpowiedź, zaakceptowana odpowiedź jest teraz tak dobra jak ta;) – OMA

Powiązane problemy