Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle Sql中返回第20行和第30行之间的行_Sql_Oracle_Filter_Subset_Rows - Fatal编程技术网

如何在Oracle Sql中返回第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 --

所以我有一个很大的表,我想输出,但是,我只想看到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 --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;