T表,ID表示用户id号,Score表示用户积分共取10个用户的积分排名列表,要求所指定Id的用户排在中间(第6位)if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[T]
GOcreate table T(ID int ,Score int)
insert T(ID,Score) select 1,100
union all select 2,101
union all select 3,101
union all select 4,102
union all select 5,103
union all select 6,105
union all select 7,105
union all select 8,106
union all select 9,107
union all select 10,108
union all select 11,109
union all select 12,110
union all select 13,116
union all select 14,117
union all select 15,118
union all select 16,101
union all select 17,103按上表数据,我指定ID=9,想得到下面的列表
ID    Score
------------
5     103
17    103
6     105
7     105
8     106
9     107
10    108
11    109
12    110
13    116

解决方案 »

  1.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[T]
    GOcreate table T(ID int ,Score int)
    insert T(ID,Score) select 1,100
    union all select 2,101
    union all select 3,101
    union all select 4,102
    union all select 5,103
    union all select 6,105
    union all select 7,105
    union all select 8,106
    union all select 9,107
    union all select 10,108
    union all select 11,109
    union all select 12,110
    union all select 13,116
    union all select 14,117
    union all select 15,118
    union all select 16,101
    union all select 17,103
    declare @i intset @i=9select * from (select top 6 * from T where Score<=(select Score from T where id =@i) order by Score desc) as T1
    union all
    select * from (select top 4 * from T where Score>(select Score from T where id=@i) order by Score ) as T2
    order by score
      

  2.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[T]
    GOcreate table T(ID int ,Score int)
    insert T(ID,Score) select 1,100
    union all select 2,101
    union all select 3,101
    union all select 4,102
    union all select 5,103
    union all select 6,105
    union all select 7,105
    union all select 8,106
    union all select 9,107
    union all select 10,108
    union all select 11,109
    union all select 12,110
    union all select 13,116
    union all select 14,117
    union all select 15,118
    union all select 16,101
    union all select 17,103
    declare @i intset @i=9select * from (select top 6 * from T where Score<=(select Score from T where id =@i) order by Score desc) as T1
    union all
    select * from (select top 4 * from T where Score>(select Score from T where id=@i) order by Score ) as T2
    order by score,id
      

  3.   


    DECLARE @i INT
    SET @i=9
    SELECT * FROM (SELECT TOP 6 * FROM T a WHERE ID<=@i ORDER BY ID DESC) A
    union all
    SELECT * FROM (select top 4 * from T where ID>@i ORDER BY ID) B
    ORDER BY ID