SQL 语句的写法问题!关于Oracle 中指定分页的SQL 问题. (100分)

  • 主题发起人 Puma Wang
  • 开始时间
P

Puma Wang

Unregistered / Unconfirmed
GUEST, unregistred user!
Oralce 数据库
想取出指定按照某个字段的排序的第 n 到 n+20 条的记录。
例: Test (Code varchar2(10),Name varchar(20),No1 varchar(20),No2 varchar2(10)) .
有Rownum可以取每行的行号,但是好像是入库时的序号。好像不能用到这里来的。
各位有什么高招吗?

 
select ... where ... between. and order
 
对字段排序,在把记录指针移到n,取20条记录。不知道你说的是不是这个意思。
 
直接用一句SQL 语句 得到想要的结果。
表结构如上,例如想得到 No1 的正排序的记录中 第21 名到 30 名的记录。
注意sql 的结果就是要求的结果。
 
n=10 最终选中 21 条

先顺着找 n+20 条,
然后倒着排找 21
最后再把这些顺过来
用两层子查询。

select * from(select top 21 * from (select top 30 * from Test order by Rownum) order by rownum/desc) order by Rownum
 
谢谢大家的关注。
可是问题有二:
1,我要的是任意指定的列的排序,不是 rownum 的排序。
2,Oracle 中不支持 top n 的。
 
试试RANK()吧
SELECT table_name from
{select rank() over (order by table_anme desc) rank1,tabl_name from user_tables
order by table_name desc) ss
where ss.rank1<=15 and ss.rank1<=100 oreder by trable_name
只用于ORACLE815以上版本。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=895861
 
select fieldlist from (select rownum as rnum,fieldlist from yourtable order by yourorderfield) where rnum > 20 and rnum < 30
 
snjat , 很好,谢谢,就是我所想要的。
 
顶部