liz*_*y81 8 sql-server-2008 null sql-server order-by
Select FullName, Login
FROM [User]
ORDER BY FullName desc, login asc
Run Code Online (Sandbox Code Playgroud)
Select FullName, Login
FROM [User]
ORDER BY FullName desc, login asc
Run Code Online (Sandbox Code Playgroud)
FullName Login
----------------------------- ------------------------------
M...... H......... mh..@...com
A.... H..... ad..@...com
NULL and..@...com
NULL ben..@...com
NULL roc..@...com
Run Code Online (Sandbox Code Playgroud)
I want the full name in abc order desc and same with login, but I want all nulls to go to the bottom.
Mar*_*ith 28
NULLS LAST
在 SQL Server 中有一个(关闭的)连接项目请求支持。
其他几种方式是
ORDER BY
CASE WHEN FullName IS NULL THEN 1 ELSE 0 END,
FullName,
Login
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个,因为它不依赖于对假设没有合法数据进行排序的字符串进行硬编码。我宁愿不必考虑在某些区分大小写的排序规则中 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
Run Code Online (Sandbox Code Playgroud)
Select FullName, Login
FROM [User]
ORDER BY CASE WHEN FullName IS NULL THEN 'ZZZZZZZ' ELSE FullName END, login asc
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5409 次 |
最近记录: |