如何在Oracle Sql中返回第20行和第30行之间的行
所以我有一个很大的表,我想输出,但是,我只想看到20到30之间的行 我试过了如何在Oracle Sql中返回第20行和第30行之间的行,sql,oracle,filter,subset,rows,Sql,Oracle,Filter,Subset,Rows,所以我有一个很大的表,我想输出,但是,我只想看到20到30之间的行 我试过了 select col1, col2 from table where rownum<= 30 and rownum>= 20; 但是sql给出了一个错误 我也试过——rownum在20到30之间 它也不起作用 那么最好的方法是什么呢 SELECT * FROM T ORDER BY I OFFSET 20 ROWS --skips 20 rows FETCH NEXT 10 ROWS ONLY --
select col1, col2
from table
where rownum<= 30 and rownum>= 20;
但是sql给出了一个错误
我也试过——rownum在20到30之间
它也不起作用
那么最好的方法是什么呢
SELECT *
FROM T
ORDER BY I
OFFSET 20 ROWS --skips 20 rows
FETCH NEXT 10 ROWS ONLY --takes 10 rows
这仅显示第21到30行。请注意,您需要对数据进行排序,否则每次可能会得到不同的结果
另请参见文档中的
附录:如图中可能出现的重复链接所示,您的问题是,如果没有编号为19的行,则不能有编号为20的行。这就是为什么rownum方法只处理前x个记录,但是当您需要跳过记录时,您需要通过在子查询中选择rownum或使用offset来解决问题。。。取回
对于较低的oracle版本或其他版本使用rownum的方法示例:
with testtab as (
select 'a' as "COL1" from dual
union all select 'b' from dual
union all select 'c' from dual
union all select 'd' from dual
union all select 'e' from dual
)
select * from
(select rownum as "ROWNR", testtab.* from testtab) tabWithRownum
where tabWithRownum.ROWNR > 2 and tabWithRownum.ROWNR < 4;
--returns only rownr 3, col1 'c'
这仅显示第21到30行。请注意,您需要对数据进行排序,否则每次可能会得到不同的结果
另请参见文档中的
附录:如图中可能出现的重复链接所示,您的问题是,如果没有编号为19的行,则不能有编号为20的行。这就是为什么rownum方法只处理前x个记录,但是当您需要跳过记录时,您需要通过在子查询中选择rownum或使用offset来解决问题。。。取回
对于较低的oracle版本或其他版本使用rownum的方法示例:
with testtab as (
select 'a' as "COL1" from dual
union all select 'b' from dual
union all select 'c' from dual
union all select 'd' from dual
union all select 'e' from dual
)
select * from
(select rownum as "ROWNR", testtab.* from testtab) tabWithRownum
where tabWithRownum.ROWNR > 2 and tabWithRownum.ROWNR < 4;
--returns only rownr 3, col1 'c'
无论何时使用rownum,它都会统计查询返回的行数。因此,如果您试图通过选择rownum 20和30之间的所有记录进行筛选,那么只有10行,因此20和30不存在。但是,您可以将其命名为任何名称,然后包装查询并重命名rownum列。通过这种方式,您可以从选择中进行选择。例如
with T as (
select requestor, request_id, program, rownum as "ROW_NUM"
from fnd_conc_req_summary_v where recalc_parameters='N')
select * from T where row_num between 20 and 30;
无论何时使用rownum,它都会统计查询返回的行数。因此,如果您试图通过选择rownum 20和30之间的所有记录进行筛选,那么只有10行,因此20和30不存在。但是,您可以将其命名为任何名称,然后包装查询并重命名rownum列。通过这种方式,您可以从选择中进行选择。例如
with T as (
select requestor, request_id, program, rownum as "ROW_NUM"
from fnd_conc_req_summary_v where recalc_parameters='N')
select * from T where row_num between 20 and 30;