Sql-Server
如果我的數據庫不支持,我如何按 NULLS LAST 排序?
Select FullName, Login FROM [User] ORDER BY FullName desc, login asc
結果
FullName Login ----------------------------- ------------------------------ M...... H......... mh..@...com A.... H..... ad..@...com NULL and..@...com NULL ben..@...com NULL roc..@...com
我想要的是
FullName Login ----------------------------- ------------------------------ A.... H..... ad..@...com M...... H......... mh..@...com NULL and..@...com NULL ben..@...com NULL roc..@...com
我想要 abc order desc 中的全名,並且與 login 相同,但我希望所有空值都到底部。
Select FullName, Login FROM [User] ORDER BY CASE WHEN FullName IS NULL THEN 'ZZZZZZZ' ELSE FullName END, login asc
SQL Server 中有一個(關閉的)連接項請求支持
NULLS LAST
。其他幾種方法是
ORDER BY CASE WHEN FullName IS NULL THEN 1 ELSE 0 END, FullName, Login
我更喜歡這個,因為它不依賴硬編碼一個假定沒有合法數據會排序的字元串。我寧願不必考慮在某些區分大小寫的排序規則中 z 在 Z 之前排序,而在其他排序規則中則相反,這會是一個問題嗎?同樣,“ Željko Ivanek”是否會在所有排序規則中可靠地排序在“ZZZZZZZ”之前?是否有來自其他語言的其他字元可能存在於名稱中並在“Z”之後排序?
如果有索引,則可能是更有效的解決方案
FullName, Login
(因為它有望避免排序)CREATE TABLE [User] ( FullName VARCHAR(100), Login VARCHAR(100), INDEX IX (FullName,Login) /*Use separate create index if < 2014*/ ); WITH T AS (SELECT 1 AS Grp, * FROM [User] WHERE FullName IS NOT NULL UNION ALL SELECT 2 AS Grp, * FROM [User] WHERE FullName IS NULL) SELECT FullName, Login FROM T ORDER BY Grp, FullName, Login