这是表中的数据
2222222222          2013-02-27 00:00:00.000
dddddddddd       2013-02-17 00:00:00.000
1111111111         2013-02-26 00:00:00.000
wwwwwwwwww       2013-02-20 00:00:00.000
asdasdasda              2013-02-12 00:00:00.000
北京北京北京北京北京北京 2013-02-06 00:00:00.000
ssssssssss       2013-02-23 00:00:00.000
aaaaaaaaaa         2013-02-13 00:00:00.000需要排序规则是:
1.优先未过期的数据
2.未过期的数据按当前时间依次往后排序
3.过期数据按离当前时间最近往后排以上数据需要得出的排序结果为:
dddddddddd       2013-02-17 00:00:00.000
wwwwwwwwww       2013-02-20 00:00:00.000
ssssssssss       2013-02-23 00:00:00.000
1111111111         2013-02-26 00:00:00.000
2222222222         2013-02-27 00:00:00.000
aaaaaaaaaa         2013-02-13 00:00:00.000
asdasdasda              2013-02-12 00:00:00.000
北京北京北京北京北京北京 2013-02-06 00:00:00.000

解决方案 »

  1.   

    select * from data where date>sysdate  order by date ascunionselect * from data where date<sysdate  order by date desc
      

  2.   

    分条件排序,过期的和不过期的,然后用union联合起来
      

  3.   

    我是这么分的
    select datediff(day,getdate(),RECRUITMENT_DATE)as dayss,RECRUITMENT_DATE,RECRUITMENT_NAME 
    from TBL_RECRUITMENT 
    where datediff(day,getdate(),RECRUITMENT_DATE)>=0
    order by dayss asc
    UNION all 
    select datediff(day,getdate(),RECRUITMENT_DATE)as dayss,RECRUITMENT_DATE,RECRUITMENT_NAME 
    from TBL_RECRUITMENT 
    where datediff(day,getdate(),RECRUITMENT_DATE)<0
    order by dayss desc消息 156,级别 15,状态 1,第 5 行
    关键字 'UNION' 附近有语法错误。
      

  4.   

    union 一加order by 就报错 
      

  5.   

    http://blog.csdn.net/tobeistdo/article/details/5613888你研究吧
      

  6.   

    你最好把你表名和字段名都写上,这样就直接给你sql语句了select *, case when 日期<getdate() then -1 else 1 end flag1, 
              case when 日期<getdate() then -1*datediff(day,日期,getdate()) else datediff(day,日期,getdate()) end flag2
    from 表 order by flag1 desc , flag2 desc 
      

  7.   

    select * from tb order by (case when convert(varchar(10),col2,120)<convert(varchar(10),getdate(),120) then 1 else 0 end),(case when convert(varchar(10),col2,120)<convert(varchar(10),getdate(),120) then null else col2 end),datediff(day,col2,getdate()) 
      

  8.   

    +1 
    用union all也可以 
    如:
    SELECT a.* FROM (
    SELECT TOP 10  NAME,adddate FROM info_demo id WHERE id.adddate>GETDATE() ORDER BY id.adddate ASC
    ) a
    UNION ALL
    SELECT b.* FROM (
    SELECT TOP 10 NAME,adddate FROM info_demo id WHERE id.adddate<GETDATE() ORDER BY id.adddate DESC
    ) b不过这儿的top 不能少