日期:2014-05-18  浏览次数:21094 次

SQL如何将空值和非空值排序
是这样,需要按升序排序,但是有空值(在这里由于是数字型,所以空值都是0)结果空值就在最前面。想要的结果是所有按升序排序,但是空值放在最后。不过我只写了这个sql,将非空排在前面,空的排在后面
SQL code

SELECT *  from  TB ORDER BY [列名] <>0 AND [列名]=0 DESC



但是结果里非空的是乱的,并不是按升序排的。

大家知不知道这个sql该如何写呢。

(如果实在没办法了我就只好在程序中循环整个DataTable用程序将空的放到最后)

------解决方案--------------------
实在不行 就 2个select(一个非空升序 一个空) union下。
------解决方案--------------------
SQL code

select * from TB order by case when [列名] is null then (select isnull(MAX([列名]),0) from TB)+1 else [列名] end asc

------解决方案--------------------
探讨

SQL code

select * from TB order by case when [列名] is null then (select isnull(MAX([列名]),0) from TB)+1 else [列名] end asc

------解决方案--------------------
探讨

实在不行 就 2个select(一个非空升序 一个空) union下。

------解决方案--------------------
SQL Server的话可以这么写
SQL code

SELECT * FROM TB ORDER BY (CASE WHEN [列名] > 0 THEN [列名] ELSE 9999 END)

------解决方案--------------------
order by isnull(列名,0)