最近遇到一个 SQL Server 排序的问题,以前也没了解过,然后这次碰到了。
才发现 SQL Server 排序的问题,在指定的排序列中 null 值会默认排在最前面,因为在 SQL Server 中 null 值默认为最小值。
后来问了一下万能的百度,找到了下面一种比较简单的处理方法。
首先建了一个表插入了一些测试数据。
create table UserInfo( UserInfoID int not null identity(1,1) primary key, User_No int null, User_Names nvarchar(16) null)insert into UserInfo(User_No,User_Names)select ‘104‘,‘名称三‘ union allselect ‘103‘,‘名称二‘ union allselect ‘108‘,‘名称七‘ union allselect ‘105‘,‘名称四‘ union allselect ‘106‘,‘名称五‘ union allselect ‘102‘,‘名称一‘ union allselect ‘107‘,‘名称六‘ union allselect ‘109‘,‘名称八‘ insert into UserInfo(User_Names)select ‘名称九‘ union allselect ‘名称十‘select * from UserInfo
下面先直接排序看下效果。
select UserInfoID,User_No,User_Names from UserInfo order by User_NO asc
可以看到指定排序的列,其值为 null 的排在了最前面。
下面就是解决办法。
select UserInfoID,User_No,User_Names from UserInfo order by case when User_NO is null then 1 else 0 end asc,User_NO asc
以上就是解决方法了,既把指定排序列的值为 null 的排在最后了,也可以按照指定的列的值进行排序,是不是很简单。