如何使用0的顺序工作SQL?

时间:2014-11-06 15:01:00

标签: sql-server sql-order-by case

它是如何运作的?

SELECT * 
FROM table1
ORDER BY 
CASE WHEN field1 is not null 
    then 0
end, 
id DESC

我可以用其他整数值替换0,但我仍然得到正确的结果。

2 个答案:

答案 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或任何其他值都无关紧要。