Nếu động cơ của bạn cho phép ORDER BY x IS NULL, x
hoặc ORDER BY x NULLS LAST
sử dụng đó. Nhưng nếu nó không có thể giúp:
Nếu bạn sắp xếp theo loại số, bạn có thể thực hiện việc này: (Mượn lược đồ từ câu trả lời khác .)
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Bất kỳ số không null nào cũng trở thành 0 và null trở thành 1, sắp xếp các giá trị null cuối cùng.
Bạn cũng có thể làm điều này cho chuỗi:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Vì 'a'
> ''
.
Điều này thậm chí hoạt động với ngày bằng cách ép buộc vào một int nullable và sử dụng phương thức cho ints ở trên:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Hãy giả vờ lược đồ có HireDate.)
Các phương pháp này tránh vấn đề phải đưa ra hoặc quản lý giá trị "tối đa" của mọi loại hoặc sửa các truy vấn nếu loại dữ liệu (và tối đa) thay đổi (cả hai vấn đề mà các giải pháp ISNULL khác mắc phải). Thêm vào đó, chúng ngắn hơn nhiều so với CASE.