用select TOP(100) * from mytable where .... 可以得到前100条数据的话, 如何select得到满足条件的第101到200条的数据?

解决方案 »

  1.   

    --如果表中有 id 自增数据
    select top 100 * from mytable where id not in (select top 100 id from mytable)
    --如果表中没有自增列 id ,则创建数据列
    --------SQL Server 2005
    --------select top 100 * from (select idd=row_number()over(order by getdate()),* from mytable)t where idd not in (select top 100 idd from (select idd=row_number()over(order by getdate()),* from mytable)t)
    --------SQL Server 2000
    --------select top 100 * from (select idd=identity(1,1),* from mytable)t where idd not in (select top 100 idd from (select idd=identity(1,1),* from mytable)t)
      

  2.   


    这样select了2次,效率会不会变低?
      

  3.   


    目前只想到了这个办法!无法避免多次select!
      

  4.   

    取n到m行1. 
    select top m * from tablename where id not in (select top n id from tablename order by id asc/*|desc*/) 2. 
    select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入到临时表 
    set rowcount n   --只取n条结果
    select * from 表变量 order by columnname desc 3. 
    select top n * from  
    (select top m * from tablename order by columnname) a 
    order by columnname desc 
    4.如果tablename里没有其他identity列,那么: 
    先生成一个序列,存储在一临时表中.
    select identity(int) id0,* into #temp from tablename 取n到m条的语句为: 
    select * from #temp where id0 > =n and id0  <= m 如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行: 
    exec sp_dboption 你的DB名字,'select into/bulkcopy',true 
    5.如果表里有identity属性,那么简单: 
    select * from tablename where identity_col between n and m  6.SQL2005开始.可以使用row_number() over()生成行号
    ;with cte as
    (
     select id0=row_number() over(order by id),* from tablename
    )
    select * from cte where id0 between n to m
      

  5.   

    谁说一定要有增长列才可以用这个?
    select top 100 * from mytable where id not in (select top 100 id from mytable)
      

  6.   


    --有自增ID的话
    select TOP(100) * from mytable where AutoID>=101
      

  7.   

    with t
    AS
    (
    select id,n = ROW_NUMBER() over(order by id desc) from test
    )
    select * from t WHERE n between 2 and 5
      

  8.   


    select top 100 
    from #t
    where tid>101
      

  9.   


    select top 100 * from mytable where id not in (select top 100 id from mytable)
      

  10.   

    select * from (
    select ROW_NUMBER() over(order by id) as RowId,* from mytable
    ) aa  where RowId between 101 and 200上面的语法需要SQL server2005以上  使用的是ROW_NUMBER() 函数,希望能够帮到你
      

  11.   

    select top 100 * from (select top 200 * from table order by id asc) table_2 order by id desc