SELECT *
FROM info
ORDER BY 
  CASE 
     WHEN DATEDIFF(DAY,publictime,GETDATE())=0
        THEN grade ELSE NULL END DESC,
  CASE 
     WHEN DATEDIFF(DAY,publictime,GETDATE())=0
        THEN publictime ELSE NULL END DESC,
  CASE 
     WHEN DATEDIFF(DAY,publictime,GETDATE())>0
        THEN publictime ELSE NULL END DESC??这样?.

解决方案 »

  1.   

    刚才有个朋友用
    select * from info
    order by 
    case when datediff(d,publictime,getdate())=0 then 0 else 1 end,grade desc,publictime desc 
    前面部分是对的,后面部分不对.
      

  2.   

    SQL05以上版本可用排序函数
    SELECT * FROM info order by case when DATEDIFF(d, publictime, GETDATE()) = 0 then grade else 0 end desc,publictime desc
      

  3.   

    上面执行的结果是:
    2 标题2 b 3 2008-10-13 9:20:50
    4 标题4 d 3 2008-10-13 8:10:50
    8 标题8 h 2 2008-10-13 18:15:50
    3 标题3 c 2 2008-10-13 10:25:50
    1 标题1 a 1 2008-10-13 17:20:50
    5 标题5 e 3 2008-10-12 10:15:50
    7 标题7 g 2 2008-10-12 11:15:50
    6 标题6 f 1 2008-10-12 13:20:50
    后面一部分排序不对..
      

  4.   


    SELECT * into #a FROM info WHERE (DATEDIFF(d, publictime, GETDATE()) = 0) Order by grade desc,publictime descSELECT * into #b FROM info WHERE (DATEDIFF(d, publictime, GETDATE()) > 0) Order by publictime descselect * from #a union all select *from #b用这个试了一下,结果撞上了,呵呵
      

  5.   

    行,
    liangCK 
    roy_88 
    是对的,josy也对喽,用的临时表倒可以,我直接用union不行,不过,代码最快最简洁应该是三楼的roy_88 
    我分数,随便意思了一下,别嫌少啊..两位兄弟..
    不对,三位都同时谢一下,呵呵.
      

  6.   

    不过roy_88最后面的一个case when DATEDIFF(d, publictime, GETDATE()) = 0 then grade else 0 end desc,publictime desc没有理解.
    当为今天的时候,grade desc,publictime desc
    else 0
    那不是 0 desc,publictime desc不是要出错了.
      

  7.   

    为什么
    SELECT * FROM info order by case when DATEDIFF(d, publictime, GETDATE()) = 0 then grade else 0 end desc,publictime desc是对的,而
    SELECT * FROM info order by case when DATEDIFF(d, publictime, GETDATE()) = 0 then grade else 1 end desc,publictime desc
    结果也是对的,怎么理解????
      

  8.   

    因为order by 1 desc 和order by 0 desc 一样,对于排序来说都是没影响的