查询N-M条记录
描述:要从记录集中取出中间一段记录来
如: 取10条中的第3-8条,即N=3,M=8
一、有唯一id,并且id连续:
方法1、
select * from table1 where id>=3 and id<=8 二、有唯一id,但id不连续
升序取前m条记录最为a, 再降序从a中取m-n+1条记录作为b,
select top m-n+1 * from (select top m * from 表) b order by id desc
上面方法是自减的顺序,若要自增的顺序
SELECT top 6 * FROM (SELECT top 6 * FROM (SELECT top 8 * FROM table1 ORDER BY id ASC) a ORDER BY id DESC) b ORDER BY id ASC或者用排除法,排除前N-1条记录
SELECT top 6 * FROM table1 WHERE id not in (SELECT top 2 id FROM table1)三、无唯一ID,用临时表:
select id=identity(int,1,1),* into #temp from table1
select (除去ID字段都选) from #temp where id>=3 and id<=8
上述方法可以改进,上例最多只要插入8条记录到临时表,而不用把所有记录都插入到临时表,
否则数量大的话影响查询速度
select top 8 *,id=identity(int,1,1) into #temp from table1
select (除去ID字段都选) from #temp where id>=3 and id<=8

解决方案 »

  1.   

    --转载declare @page int, @pagesize int --定义页数和每页显示的记录数
    declare @sql varchar(8000)select @page=2,--第几页
    @pagesize=10--记录数select @sql = 'select top ' + cast(@pagesize as varchar) 
    + ' * from tab where id not in (select top '
    + cast(@pagesize*(@page-1) as varchar)
    + ' id from tab order by id) 'exec(@sql)