(1)传个id进来,根据传入的id查询此id的上一条记录与下一条记录,id可能是不连续的。
(2)有一个表A有列A1,A1,A3,A4,A5,其中A5不是索引,但可以唯一标识,现在要得到这样的结果:
   A1     A3     A5
 1111 3333 5555
SQL 语句怎么写?要性能很好那种求高人解答。

解决方案 »

  1.   

    ;with t as
    (
      select rn=row_number()over(order by id),*
      from tb
    )
    select *
    from t 
    where rn=(select rn-1 from t where id=@id) --rn-1 上一条,rn+1下一条,rn 本条记录
      

  2.   

    我晕,,,没看懂;;with t as这个是什么语法啊?
      

  3.   

    ;with t as
    (
      select rn=row_number()over(order by id),*
      from tb
    )
    select *
    from t 
    where rn=(select rn-1 from t where id=@id)
      

  4.   

    (1)传个id进来,根据传入的id查询此id的上一条记录与下一条记录,id可能是不连续的。
    --上一条记录
    select top 1 * from tb where id < @id order by id desc--下一条记录
    select top 1 * from tb where id > @id order by id 
      

  5.   

    有一个表A有列A1,A1,A3,A4,A5,其中A5不是索引,但可以唯一标识,现在要得到这样的结果:
      A1 A3 A5
     1111 3333 5555
    ---------------------------
    select 
      max(case a when 'a1' then val end) [A1],
      max(case a when 'a3' then val end) [A3],
      max(case a when 'a5' then val end) [A5]
    from tb
      

  6.   

    假设@id是传入的id
    上一条:select * from tb where id=(select max(id) from tb where id<@id)
    下一条:select * from tb where id=(select min(id) from tb where id>@id)
      

  7.   

    不对啊。。比如id顺序是:5 1 9 4 7 2 8我传个id为4的id进来,那他的上一条是9,下一条是7。order by之了后取的数据就不对啊
      

  8.   

    ;with t as
    (
      select rn=row_number()over(order by getdate()),*
      from tb
    )
    select *
    from t 
    where rn=(select rn-1 from t where id=@id) --rn-1 上一条,rn+1下一条,rn 本条记录