有一组数据如下:id name taxis   createtime
1   a    0      2009-01-01 01:32:57
2   b    2      2009-01-02 02:32:57
3   c    5      2009-01-03 03:32:57
4   d    0      2009-01-04 04:32:57
5   e    0      2009-01-05 05:32:57
6   f    1      2009-01-06 09:32:57
7   g    0      2009-01-07 08:32:57
8   h    4      2009-01-08 07:32:57
9   i    3      2009-01-09 06:32:57想要这样排序id name taxis   createtime6   f    1      2009-01-06 09:32:57
2   b    2      2009-01-02 02:32:57
9   i    3      2009-01-09 06:32:57
8   h    4      2009-01-08 07:32:57
3   c    5      2009-01-03 03:32:57
1   a    0      2009-01-01 01:32:57
4   d    0      2009-01-04 04:32:57
5   e    0      2009-01-05 05:32:57
7   g    0      2009-01-07 08:32:57先taxis 排序,然后再createtime排序,老郁闷了,写这sql半天调不好。请指点一下,谢谢!

解决方案 »

  1.   


    SELECT
    id,
    name,
    taxis,
    createtime
    FROM
    TB
    ORDER BY
    taxis,createtime
      

  2.   

    order by taxis,createtime 
    ???
    怎么会调不好呢?
      

  3.   

    这样taxis 是0的都排在前面了。
      

  4.   

    1楼的查询,好像也满足不了楼主的要求啊
    因为他的taxis字段,不是正常的升序和降序,1 2 3 4 5 0,这个怎么排?
    楼主知道这个排序是升序,还是降序不????
      

  5.   


    升序降序都达不到效果,我用Union all 也没调好。
      

  6.   

    如果我只掉4条数据是taxis 剩下的按 createtime排序,改怎么写呢
      

  7.   

    order by charindex('你要排序的taxis中的字段',taxis ),charindex('你要排序的createtime中的字段',createtime )
      

  8.   


    哥们能给段完整的sql语句吗,我测试还是达不到我想要的结果,数据库中假设有100条数据,我只想调出来8条数据,先按taxis排序,然后再看createtime排序。按taxis排序 不要 等于0 的 升序排序。然后再按createtime排序
      

  9.   


    哥们能给段完整的sql语句吗,我测试还是达不到我想要的结果,数据库中假设有100条数据,我只想调出来8条数据,先按taxis排序,然后再看createtime排序。按taxis排序 不要 等于0 的 升序排序。然后再按createtime排序
      

  10.   

    我有一种建议,可能不是很好,你参考一下
    你自己建一个零时表,里面在你的表的基础上再加一个自增长的ID
    然后,你先把taxis>0的记录按你的排序查出来,然后插入到零时表里面
    再把taxis=0的记录按你的排序查出来,再插入到零时表里面再从零时表里,根据自增长的ID的排序,来获取你要的结果你看怎么样?这是一个土办法,应该能解决问题。但是,不怎么地道看哪个高手出来看看,或者你到MSSQL的专栏里面,发表一下,看那里有没有高手能解决,我看那个里面很多大鸟都在的
      

  11.   

    create table test(id int, name varchar(10), taxis int,  createtime datetime )
    go
    insert test select 1,  'a',    0 ,     '2009-01-01 01:32:57' 
    insert test select 2,  'b' ,   2  ,    '2009-01-02 02:32:57' 
    insert test select 3,  'c' ,   5 ,     '2009-01-03 03:32:57' 
    insert test select 4,  'd' ,   0 ,     '2009-01-04 04:32:57' 
    insert test select 5,  'e' ,   0 ,     '2009-01-05 05:32:57' 
    insert test select 6,  'f' ,   1 ,     '2009-01-06 09:32:57' 
    insert test select 7,  'g',    0 ,     '2009-01-07 08:32:57' 
    insert test select 8,  'h' ,   4 ,     '2009-01-08 07:32:57' 
    insert test select 9,  'i' ,   3 ,     '2009-01-09 06:32:57' 
    go
    select  * from test
    go
    select top 8 * from test order by case  when taxis>0 then taxis else 100 end asc,createtime asc
    go
    drop table test
    /*
    id          name       taxis       createtime                                             
    ----------- ---------- ----------- ------------------------------------------------------ 
    6           f          1           2009-01-06 09:32:57.000
    2           b          2           2009-01-02 02:32:57.000
    9           i          3           2009-01-09 06:32:57.000
    8           h          4           2009-01-08 07:32:57.000
    3           c          5           2009-01-03 03:32:57.000
    1           a          0           2009-01-01 01:32:57.000
    4           d          0           2009-01-04 04:32:57.000
    5           e          0           2009-01-05 05:32:57.000(所影响的行数为 8 行)*/
      

  12.   

    select * from(select top 10  id,name,taxis,createtime from test1 where taxis!=0 order by taxis,createtime) A union All select * from(select top 10  id,name,taxis,createtime from test1 where taxis=0 order by taxis,createtime ) B
    top 后面的值取足够大保证所有行被选中