如果有张表,假设是
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值和相同部会分按主键排序,还是什么
关于这方面的排序规则有人能帮忙解说下吗,有些好奇,谢谢
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值和相同部会分按主键排序,还是什么
关于这方面的排序规则有人能帮忙解说下吗,有些好奇,谢谢
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' union all
select 3,null,'2011-6-9' union all
select 4,2,'2011-5-4' union all
select 5,1,'2012-4-4' union all
select 6,null,'2010-5-4'select * from @T ORDER BY bb/*
aa bb cc
----------- ----------- -----------------------
3 NULL 2011-06-09 00:00:00.000
6 NULL 2010-05-04 00:00:00.000
5 1 2012-04-04 00:00:00.000
4 2 2011-05-04 00:00:00.000
1 2 2011-01-01 00:00:00.000
2 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值的排在最前面,然后会根据关键字排序
--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 null
drop table tb
go
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-1
6 NULL 2011-5-4
5 1 2012-4-4
1 2 2011-1-1
4 2 2011-5-4
2 4 2011-1-1(6 行受影响)
加上order by aa 即可。原因是你写了order by bb 没有限制aa 所以aa 先4后1 ,还是先1后4 不受控制。