2009-12-10 4 views
9

Tôi đã nhận được truy vấn MySql đặt lệnh cho tôi kết quả theo cột no (int, có thể là null). đơn giản ví dụ:SQL ORDER bởi `no` với NULL ở cuối

SELECT * FROM table ORDER BY no ASC

Tôi muốn để có được một resultset được sắp xếp như

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

nhưng tôi nhận

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

Có thể với truy vấn SQL?

Trả lời

24

Bạn có thể thử điều này không?

ORDER BY ISNULL(no),no; 
+0

Tại sao không chỉ "ORDER BY ISNULL (không), không;"? ISNULL đã trả về 1 nếu null hoặc 0 nếu không. – OMA

+0

Vâng, nên, tôi đứng sửa! – YOU

1

Ok, tôi nghĩ rằng tôi đã nhận nó:

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

Hoặc là có cách nào tốt hơn?

+0

đó làm việc quá :) –

+0

Nhưng với phức tạp truy vấn - vài 'JOIN's nó sẽ sợ hãi. :) – hsz

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

Chỉ cần thay 999999 bằng thứ gì đó lớn hơn nếu số của bạn lớn hơn tự nhiên.

+0

Xấu một khi 'no' đạt được '999999 + 1'. – hsz

4

Bạn có thể sử dụng một tuyên bố CASE để tinh chỉnh đặt hàng:

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

lệnh này về "nullableness" đầu tiên, và no thứ hai.

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

Tôi nghĩ rằng đây là câu trả lời tốt nhất vì sự đơn giản của nó – OMA

+0

Vâng, bây giờ người dùng "BẠN" đã thay đổi câu trả lời của mình, câu trả lời được chấp nhận giờ đây tốt như câu trả lời này;) – OMA