Select FullName, Login
FROM [User]
ORDER BY FullName desc, login asc
FullName Login
----------------------------- ------------------------------
M...... H......... [email protected]
A.... H..... [email protected]
NULL [email protected]
NULL [email protected]
NULL [email protected]
FullName Login
----------------------------- ------------------------------
A.... H..... [email protected]
M...... H......... [email protected]
NULL [email protected]
NULL [email protected]
NULL [email protected]
フルネームをabcオーダーdescにして、ログインと同じにしたいのですが、すべてのヌルを一番下に移動させたいです。
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でソートし、他の場合はその逆が適用されることを考慮する必要はありませんが、それは問題でしょうか?同様に、 " ŽeljkoIvanek "は、すべての照合で確実に "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