2009-12-10 19 views
9

我有一个MySql查询命令我的结果为no column(int,可以为null)。 简单的例子:SQL ORDER by`no`在最后为NULL

SELECT * FROM table ORDER BY no ASC

我想获得一个结果排序像

1, 2, 3, 10, 52, 66, NULL, NULL, NULL

,但我得到

NULL, NULL, NULL, 1, 2, 3, 10, 52, 66

是否有可能与SQL查询?

回答

24

你可以试试吗?

ORDER BY ISNULL(no),no; 
+0

为什么不只是“ORDER BY ISNULL(no),no;”?如果为空,则ISNULL已经返回1,否则返回0。 – OMA 2014-05-22 11:49:56

+0

是的,应该是我纠正! – YOU 2014-05-24 10:36:58

1

好吧,我想我明白了:

SELECT * FROM table WHERE no IS NOT NULL ORDER BY no ASC UNION
SELECT * FROM table WHERE no IS NULL

或者有什么更好的办法?

+0

这工作太:) – 2009-12-10 11:11:50

+0

但随着复杂的查询 - 几个'JOIN's它会害怕。 :) – hsz 2009-12-10 11:16:43

2
SELECT * FROM table ORDER BY COALESCE(no,999999) ASC 

只要用更大的东西替换999999,如果你的数字自然大于这个数字。在 “nullableness” 第一和第二no

SELECT * 
FROM table 
ORDER BY case when no is null then 2 else 1 end, no 

此命令:

+0

当我的'no'达到'999999 + 1'时出现问题。 – hsz 2009-12-10 11:13:05

4

您可以使用CASE语句来调整排序。

2
SELECT * FROM table ORDER BY ISNULL(field), field ASC; 
+0

我认为这是最好的答案,因为它的简单性 – OMA 2014-05-22 11:52:45

+0

好吧,现在用户“你”改变了他的答案,现在接受的答案和现在一样好;) – OMA 2014-05-24 17:10:27