select top 20 * from table order by xxx desc

解决方案 »

  1.   

    declare @cn int
    declare @sql varchar(300)
    set @cn=(select count(*) from table1)
    if @cn>20 
    set @cn=@cn-20
    set @sql='select top '+convert(char(30),@cn)+' * into temp from table1'
    exec(@sql)
    select * from table1 where id not in (select id from temp)
    drop table temp
      

  2.   

    select * into #temp from table1
    alter table #temp add idx int identity(1,1)
    select * from #temp where idx>@@rowcount-20
      

  3.   

    SELECT NUM=COUNT(*), A.ID, A.NAME
    FROM TABLE A, TABLE B
    WHERE A.ID>= B.ID
    GROUP BY A.ID,A.NAME
    HAVING COUNT(*)>20 AND COUNT(*)<=40
    ORDER BY 1嘻,这样写,在数据量大的时候会有点慢,不过可以满足你的要求。
    HAVING后面的语句就是你要取得行数,你可任意取任何行数,例如
    你要取出第48到60条的纪录,你的HAVING语句可以这样写
    HAVIGN COUNT(*)>48 AND COUNT(*)<=60
      

  4.   

    SELECT NUM=COUNT(*), A.ID, A.NAME
    FROM TABLE A, TABLE B
    WHERE A.ID>= B.ID
    GROUP BY A.ID,A.NAME
    HAVING COUNT(*)>20 AND COUNT(*)<=40
    ORDER BY 1嘻,这样写,在数据量大的时候会有点慢,不过可以满足你的要求。
    HAVING后面的语句就是你要取得行数,你可任意取任何行数,例如
    你要取出第48到60条的纪录,你的HAVING语句可以这样写
    HAVIGN COUNT(*)>48 AND COUNT(*)<=60
      

  5.   

    希望澄清一个概念,表中的数据根本是没有前面和后面之说,只有排序.
    wanghu(不懂就是不懂)的答案正确
      

  6.   

    select  * from 
    (select (select count(*) from a1 where id <= a.id) AS ROW, * FROM a1 as a ) as b
    where b.row >20 and b.row <= 40
      

  7.   

    select top 40 * from tablename where id not in (select top 20 * from table)
      

  8.   

    To: remanwang(玩玩儿
    有逻辑顺序,就是你显示所看到的顺序
      

  9.   

    SELECT IDENTITY(INT,1,1) AS ORDERCOL INTO #TABLE FROM TABLE 
    SELECT TOP 20 * FROM #TABLE ORDER BY ORDERCOL DESC
      

  10.   

    我还是不是很满意
    我的意思是怎么查找后20条记录
    比如开始为1-20,后20条为21-40,再后20条为41-60,比如做BBS记录的翻页
    j9988(j9988) 的还可以,就是不知道对不对
      

  11.   

    http://www.csdn.net/expert/topic/809/809190.xml?temp=.5565454
      

  12.   

    用游标吧
    USE pubs
    GO
    DECLARE authors_cursor scroll CURSOR FOR
    SELECT au_id,au_lname,au_fname FROM authors
    OPEN authors_cursor
    declare @a int,@b varchar(20),@c varchar(20),@d varchar(20)
    set @a=1
    while @a<21
    begin 
    set @a=@a+1
    FETCH next from authors_cursor into @b,@c,@d
    select @b,@c,@d
    end
    while...
    CLOSE authors_cursor
    DEALLOCATE authors_cursor
      

  13.   

    select identity(int,1,1) AS colnum into #tmptable from 表名 
    select  id,name from #tmptable  where colnum between startcol and endcol
    这样可以查任意某段的记录!!
      

  14.   

    先使用count(*) 得到所有记录数目,然后使用游标遍历,只把最后20条返回:
    select @TotalRowNum=count(*) from t1
    SET @startpos=@TotalRowNum-20
    DECLARE @t1_cursor CURSOR
    SELECT t1.field1,t1.field2 FROM t1
    OPEN t1_cursor
    SET @currentpos=0WHILE @currentpos<=@TotalRowNum
    BEFGIN
      @currentpos=@currentpos+1
      
      if @currentpos>@startpos
      SELECT t1.field1,t1.field2 FROM t1
      
      FETCH NEXT FROM t1_cursor
    END
    CLOSE t1_cursor 
      

  15.   

    前几天,上面错了
    select top 20 * from tablename where id not in (select top 20 * from table)