本帖最后由 bing475879749 于 2010-05-30 17:48:10 编辑

解决方案 »

  1.   

    比较蠢的做法select * from(
    select top 999999999 * from test where tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt<=30 order by tjt desc) t1
    union all
    select * from(
    select top 999999999 * from test where (tj=0 or (tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt>30)) order by id desc) t2
      

  2.   


    declare @t1 table(id int,tj int,tjt datetime)
    insert into @t1
    select * from test where tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt<=30 order by tjt desc
    declare @t2 table(id int,tj int,tjt datetime)
    insert into @t2
    select * from test where (tj=0 or (tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt>30)) order by id desc
    select * from @t1
    union all
    select * from @t2id tj tjt
    9 1 2010-05-25 00:00:00.000
    5 1 2010-05-22 00:00:00.000
    7 1 2010-05-21 00:00:00.000
    8 0 NULL
    6 0 NULL
    4 0 NULL
    3 1 2010-03-21 00:00:00.000
    2 0 NULL
    1 0 NULL
      

  3.   


    select * from test
    order by case when tj=1 and datetime(dd,tjt,getdate())<30 then tjt else null end desc,id desc
      

  4.   

    seelct * 
    from
    (
    select *,aa=1 from test where tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt<=30 
    union all
    select *aa=2 from test where (tj=0 or (tj=1 and CONVERT(varchar(100), GETDATE(), 23)-tjt>30)) 
    ) t
    order by  aa,tjt desc,id desc
      

  5.   

    IF OBJECT_ID('test') IS NOT NULL
    DROP TABLE test
    GO
    CREATE TABLE test
    (
    ID INT IDENTITY(1,1) NOT NULL,
    TJ INTEGER,
    TJT DATETIME
    )
    INSERT test SELECT 0,NULL
    INSERT test SELECT 0,NULL
    INSERT test SELECT 1,'2010-3-21'
    INSERT test SELECT 0,NULL
    INSERT test SELECT 1,'2010-5-22'
    INSERT test SELECT 0,NULL
    INSERT test SELECT 1,'2010-5-21'
    INSERT test SELECT 0,NULL
    INSERT test SELECT 1,'2010-5-25'SELECT * 
    FROM test
    ORDER BY CASE 
                  WHEN tj=1 AND DATEDIFF(dd, tjt, GETDATE())<30 THEN tjt
             END DESC,id DESC
    /*
    ID          TJ          TJT
    ----------- ----------- -----------------------
    9           1           2010-05-25 00:00:00.000
    5           1           2010-05-22 00:00:00.000
    7           1           2010-05-21 00:00:00.000
    8           0           NULL
    6           0           NULL
    4           0           NULL
    3           1           2010-03-21 00:00:00.000
    2           0           NULL
    1           0           NULL(9 行受影响)
    */
      

  6.   

    不好意思,没注意到5楼的代码,Sorry