它是如何运作的?
SELECT *
FROM table1
ORDER BY
CASE WHEN field1 is not null
then 0
end,
id DESC
我可以用其他整数值替换0,但我仍然得到正确的结果。
答案 0 :(得分:3)
正如jurergen指出的那样,这会降低ORDER BY
对两位候选人的可能性:NULL
和 n
。无论 n 是0,6,562还是391842,条件一(NULL
)中的任何内容都将显示在条件二( n )之前的任何内容中。
如果通过“正确的结果”,您的意思是“首先显示Field1中NULL
的内容”,那么任何数字(正数或负数)都可以用作 n 。< / p>
一些示例数据:查看ORDER BY
子句实际执行的内容会很有帮助,因此我将在CASE
中复制SELECT
语句。
DECLARE @Table1 TABLE (ID INT IDENTITY(1,1), Field1 INT, FieldSomethingElse VARCHAR(10))
INSERT INTO @Table1 (Field1, FieldSomethingElse) VALUES (1, 'some')
INSERT INTO @Table1 (Field1, FieldSomethingElse) VALUES (2, 'thing')
INSERT INTO @Table1 (Field1, FieldSomethingElse) VALUES (765, 'or')
INSERT INTO @Table1 (Field1, FieldSomethingElse) VALUES (NULL, 'another')
INSERT INTO @Table1 (Field1, FieldSomethingElse) VALUES (NULL, 'thing')
SELECT
*,
CASE WHEN Field1 IS NOT NULL THEN 'ItDoesn''t Matter What I Put Here, it is the same value for every non-NULL row' END AS ThisIsWhatYouAreSortingBy
FROM @Table1
ORDER BY
CASE WHEN Field1 IS NOT NULL THEN 'ItDoesn''t Matter What I Put Here, it is the same value for every non-NULL row' END, ID DESC
正如您可能已经想到的那样,目的是允许您的ORDER BY
使用ID
字段作为排序,但将其分开以使行NULL
} Field1值首先出现。
答案 1 :(得分:-1)
ORDER BY CASE WHEN field1不为null 那么0 端
NULL值将首先出现在所有其他值之前。所以0或任何其他值都无关紧要。