select *
from (
       select top 100 percent id,dorder 
        from test 
         where dorder<>0  
          order by dorder asc
     )t
union 
select  id,dorder from test where dorder=0  order by id desc

解决方案 »

  1.   

    这样也不行.这样把order=0的放在order<>0之间了
      

  2.   

    select *
    from (
           select top 100 percent id,dorder 
            from test 
             where dorder<>0  
              order by dorder asc
         )t
    union all
    select  id,dorder from test where dorder=0  order by id desc
      

  3.   

    还是不行呀.两种写法我都试过了:
    --------------union查出结果-------------
    9 62
    8 66
    7 0
    6 8
    5 0
    4 3
    3 13
    2 23
    1 2
      

  4.   

    select *
    from (
           select  id,dorder from test where dorder<>0 
           union 
           select  id,dorder from test where dorder=0
         )t
    order by dorder asc,
             id desc
      

  5.   

    这样要对了.可dorder为0的该排在最dorder<>0的所有记录的后面呀
    ---------------------
    7 0
    5 0
    1 2
    4 3
    6 8
    3 13
    2 23
    9 62
    8 66
      

  6.   

    select *
    from (
           select  id,dorder from test where dorder<>0 
           union 
           select  id,dorder from test where dorder=0
         )t
    order by dorder desc,
             id desc
      

  7.   

    我只想说太感谢你了,不过我想让dorder按asc排,ID按desc排.
    ----------------
    8 66
    9 62
    2 23
    3 13
    6 8
    4 3
    1 2
    7 0
    5 0
    ---------------我想要的sort结果是----------------
    1 2
    4 3
    6 8
    3 13
    2 23
    9 62
    8 66
    7 0
    5 0
      

  8.   

    declare @tb table
    (
      id int,dorder int
    )
    insert @tb
    select 8,66 union
    select 9,62 union
    select 2,23 union
    select 3,13 union
    select 6,8 union
    select 4,3 union
    select 1,2 union
    select 7,0 union
    select 5,0--查询
    select * from @tb 
    order by (case when dorder=0 then 2 else 0 end)
             ,dorder --结果
    /*
    id          dorder      
    ----------- ----------- 
    1           2
    4           3
    6           8
    3           13
    2           23
    9           62
    8           66
    7           0
    5           0
    */
      

  9.   

    这样数据显示不正确呀.
    id title dorder
    1   fff   0
    ..............
    像遇到这种就不行了.
      

  10.   

    id       title    dorder
    29 3 1
    30 44 12
    31 4 0
    34 234 0
    最后显示成这种错误的呀
      

  11.   

    你不是要把dorder为0的放在后边吗?
      

  12.   

    谢了老大.最后发现后面加上id desc就对了.是怎么回事呢?你这种排序我怎么懂不起呢^_^
    (case when dorder=0 then 2 else 0 end)这个干什么呀?
    select id,title,dorder from TB_Information 
    order by (case when dorder=0 then 2 else 0 end),dorder,id desc
      

  13.   

    可以用下面方法实现:
    select A.*
    from (  select id,dorder from test where dorder<>0 
            union 
            select id,dorder from test where dorder=0
          ) A
    order by A.id desc