当前位置: 代码迷 >> Sql Server >> 关于表里面null值排序有关问题
  详细解决方案

关于表里面null值排序有关问题

热度:77   发布时间:2016-04-27 14:25:50.0
关于表里面null值排序问题
如果有张表,假设是
aa bb cc
1 2 2011-1-1
2 4 2011-2-1
3 null 2011-6-9
4 2 2011-5-4
5 1 2012-4-4
6 null 2010-5-4
aa是主键,里面有一列bb可以空值,那么如果我对这列bb用升序排列,那么排序的结果中
null值和相同部会分按主键排序,还是什么
关于这方面的排序规则有人能帮忙解说下吗,有些好奇,谢谢


------解决方案--------------------
先按bb排序,null排在最前面。bb相同的在按主键aa排序
------解决方案--------------------
你可以在排序的时候指定null值到底是在前还是在后

order (case when bb is null then 0 else 1 end)
------解决方案--------------------
SQL code
declare @T table (aa INT PRIMARY KEY,bb int,cc datetime)insert into @Tselect 1,2,'2011-1-1' union allselect 2,4,'2011-2-1' union allselect 3,null,'2011-6-9' union allselect 4,2,'2011-5-4' union allselect 5,1,'2012-4-4' union allselect 6,null,'2010-5-4'select * from @T ORDER BY bb/*aa          bb          cc----------- ----------- -----------------------3           NULL        2011-06-09 00:00:00.0006           NULL        2010-05-04 00:00:00.0005           1           2012-04-04 00:00:00.0004           2           2011-05-04 00:00:00.0001           2           2011-01-01 00:00:00.0002           4           2011-02-01 00:00:00.000*/--你可以加上order by 就可以了,不加的话不自动按主键排其他列。--例如上面的bb为null  的前面是3,6 bb为2的前面是5,4
------解决方案--------------------
排序结果如下所示
aa bb cc
3 null 2011-6-9
6 null 2010-5-4
5 1 2012-4-4
1 2 2011-1-1
4 2 2011-5-4
2 4 2011-2-1
为null值的排在最前面,然后会根据关键字排序

 

------解决方案--------------------
SQL code
--如果有张表,假设是--aa bb cc--1 2 2011-1-1--2 4 2011-2-1--3 null 2011-6-9--4 2 2011-5-4--5 1 2012-4-4--6 null 2010-5-4if OBJECT_ID('tb') is not nulldrop table tbgo create table tb ( aa    int identity(1,1) , bb int null, cc varchar(50) ) on [PRIMARY]insert into tb values(2, '2011-1-1'),(4, '2011-1-1')insert into tb (cc)values(   '2011-1-1')insert into tb values(2, '2011-5-4'),(1, '2012-4-4')insert into tb (cc)values( '2011-5-4') --aa是主键,里面有一列bb可以空值,那么如果我对这列bb用升序排列,那么排序的结果中--null值和相同部会分按主键排序,还是什么--关于这方面的排序规则有人能帮忙解说下吗,有些好奇,谢谢 select * from tb order by bb,aa  --null 就是什么都么有,按bb升序排列null排第一,再按照aa的排序aa          bb          cc----------- ----------- --------------------------------------------------3           NULL        2011-1-16           NULL        2011-5-45           1           2012-4-41           2           2011-1-14           2           2011-5-42           4           2011-1-1(6 行受影响)
------解决方案--------------------
探讨

想问下bb= 2的时候,为什么aa的值 先是4 后面才是1
引用:

SQL code

declare @T table (aa INT PRIMARY KEY,bb int,cc datetime)
insert into @T
select 1,2,'2011-1-1' union all
select 2,4,'2011-2-1' un……

------解决方案--------------------
叶子是这高手
  相关解决方案