主  题:请问如何取得表中间一部分记录?
作  者:LiaoCheng
所属论坛:数据库开发
问题点数:80
回复次数:10
发表时间:2001-11-5 19:12:42
 
  
  在SQL SERVER中,我要的是一句SQL或两句,不需要多余的记录
比如:我只要取第10至20条记录,如何取,请大家指教
 
回复贴子: 
回复人: JWhiteHorse(白马) (2001-11-5 19:15:26)  得0分 
u~p  
回复人: JWhiteHorse(白马) (2001-11-5 19:15:35)  得0分 
u~p  
回复人: zhuzhichao(竹之草)(准备闭关...) (2001-11-5 19:18:32)  得20分 
比方說,表中的聚族索引是nameselect top 10 * from 
(select * from 
(select top 20 * from TableName order by name) ss order by name desc) tt; 
回复人: zhuzhichao(竹之草)(准备闭关...) (2001-11-5 19:22:23)  得10分 
方法2:select top 20 identity(int,1,1) id,* into #temp1 from TableName;
go
set ROWCOUNT 10
go
delete from #temp1;
go
select * from #temp1;
go
set ROWCOUNT 0;  
回复人: Amy2008(夏茵) (2001-11-5 19:53:53)  得0分 
这个问题不是前几天有人问过并且各位大虾已回答过吗?
请查阅‘已解决’问题中‘SQL SERVER2000能实现查询从n条记录 到m条记录的功能吗?’  
回复人: Amy2008(夏茵) (2001-11-5 19:56:58)  得0分 
这个问题不是前几天有人问过并且各位大虾已回答过吗?
请查阅‘已解决’问题中‘SQL SERVER2000能实现查询从n条记录 到m条记录的功能吗?’  
回复人: Amy2008(夏茵) (2001-11-5 20:01:21)  得30分 
我已经替你找到了浪客大虾的答案:(不要说我剽窃哦):hi,nanhill经过了半个小时的试验和测试我已以找出了答案先说一下为什么前面的解法行不通,minus不行;order by key_id(唯一索引字段)可能打乱表的自然顺序;set rowcount n 只能限制对前n条记录进行操作,也不起多大作用。
你说的第10条到第20条记录我理解为共11条记录,解法如下:select top 9 * into #temp from table
select top 20-10+1 * from table where key_id 
not in (select key_id from #temp)为什么括号内不能换成select top 10 key_id from table的原因你试一下就明白了。 
回复人: LiaoCheng(自由人) (2001-11-7 18:20:05)  得0分 
zhuzhichao(竹之草),用第一种方法好像把顺序反掉了,有什么办法搞定这个问题?
第二种方法要临时表,不想用Amy2008(夏茵) 不用临时表该怎么办呢?  
回复人: zhuzhichao(竹之草)(准备闭关...) (2001-11-7 18:26:26)  得20分 
select top 10 * from 
(select * from 
(select top 20 * from TableName order by name) ss order by name desc) tt
order by name order by name; 
回复人: LiaoCheng(自由人) (2001-11-7 22:04:50)  得0分 
结账,多谢班主zhuzhichao(竹之草) 和 Amy2008(夏茵) 
但是我是这样写的,在SQL2000中可以用,我还要到SQL70试试看行不行select * from(
select top 10 * from 
(select top 20 * from t_esong order by esid) ss order by esid desc) 
as dd order by esid

解决方案 »

  1.   

    Select first/top Y skip X * from mytable(interbase 6.x)
      

  2.   

    MySQL有这样的用法:
    select * from tablename order by colname limit 10,15
      

  3.   

    SELECT  *
    FROM table
    WHERE ROWNUM<20
    MINUS
    SELECT *
    FROM table
    WHERE ROWNUM<10;`
      

  4.   

    db2 中:select a.* from table as a,(select row_num() over (oder by pk) as row_no,pk from table ) as b where a.pk = b.pk and b.row_no between 10 and 20 pk是表中的主键
      

  5.   

    在VFP里就是NEXT、REST、RECORD、ALL了!
    MYSQL里:LIMIT(M,N)
    ORACLE:WHERE ROWNUM《N
    SQLSERVER:TOP N PERCENT
    看着办吧!
      

  6.   

    select *  
    from (select *  from  table_name order by field_name)
    where rownum<10 and rownum>20;
      

  7.   

    lllmby:
    select *  
    from (select *  from  table_name order by field_name)
    where rownum<10 and rownum>20; 
     
    你的where条件明显是无解的.