如果有张表,假设是
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值和相同部会分按主键排序,还是什么
关于这方面的排序规则有人能帮忙解说下吗,有些好奇,谢谢

解决方案 »

  1.   

    先按bb排序,null排在最前面。bb相同的在按主键aa排序
      

  2.   

    你可以在排序的时候指定null值到底是在前还是在后order (case when bb is null then 0 else 1 end)
      

  3.   


    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
      

  4.   

    那么大个比方,我先引用索引按cc排序,之后按bb排序,结果bb相同的时候会按照aa还是bb排序呢
      

  5.   

    排序结果如下所示
    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值的排在最前面,然后会根据关键字排序 
      

  6.   

    --如果有张表,假设是
    --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 行受影响)
      

  7.   

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

  8.   


    加上order by aa 即可。原因是你写了order by bb 没有限制aa 所以aa 先4后1 ,还是先1后4 不受控制。
      

  9.   

    我主要是想在排序的时候,如果遇到null和重复的情况,其他不涉及排序的列会按照什么情况排序,除了主键,还有什么会有影响,还是说相同的部分,可能会随机排序