Oracle 生成数

Oracle 生成数,oracle,plsql,oracle10g,oracle11g,Oracle,Plsql,Oracle10g,Oracle11g,朋友们,我写了这段代码。它将生成srlnum,lotsrl。 srlnum是记录总数,lotsrl是5000之后从1到5000的记录 它将再次从1开始 /* Formatted on 2012/12/21 15:00 (Formatter Plus v4.8.8) */ SELECT ROW_NUMBER () OVER (ORDER BY a.co_series, a.CATEGORY, a.dnr_from) srlnum,

朋友们,我写了这段代码。它将生成srlnum,lotsrl。 srlnum是记录总数,lotsrl是5000之后从1到5000的记录 它将再次从1开始

 /* Formatted on 2012/12/21 15:00 (Formatter Plus v4.8.8) */
            SELECT ROW_NUMBER () OVER (ORDER BY a.co_series, a.CATEGORY,
                    a.dnr_from) srlnum,
                   CASE
                      WHEN MOD (ROW_NUMBER () OVER (ORDER BY a.co_series, a.CATEGORY,
                                 a.dnr_from),
                                5000
                               ) = 0
                         THEN 5000
                      ELSE MOD (ROW_NUMBER () OVER (ORDER BY a.co_series, a.CATEGORY,
                                 a.dnr_from),
                                5000
                               )
                   END lotsrl
              FROM iq_dnrfl a, iq_cocat b
             WHERE a.co_series = 'S1'
               --SYS_CONTEXT ('TFR_CTX', 'p$_csrcod')
               AND a.CATEGORY = 9
               --SYS_CONTEXT ('TFR_CTX', 'p$_category')
               AND a.co_series = b.co_series
               AND a.CATEGORY = b.CATEGORY
               AND NVL (olf_flag, 'N') = 'Y';
像这样的东西

srlnum ,lotsrl
1         1
2         2
3         3 
4         4 
5         5 
.         . 
.         .
.         .
5000     5000
5001      1 
.
.
.
10000    5000
10001    1
.
.
.
但现在我需要另一列,它应该为1到5000之间的数字生成数字1,并从1到5000之间的另一个数字生成数字2

像这样的

srlnum ,lotsrl ,num
1         1      1
2         2      1  
3         3      1
4         4      1
5         5      1
.         .      1
.         .      1
.         .      1
5000     5000    1
5001     1       2  
.        2       2
.        3       2  
.            2  
10000    5000    2
10001    1       3
.                3
.
.

请帮助我的朋友

尝试选择此作为
num

TRUNC( ROW_NUMBER () OVER (ORDER BY a.co_series, a.CATEGORY, a.dnr_from) / 5001 ) + 1
也许:


我想你可以试试这种方法,但因为我没有你的完整数据,所以我使用了我的数据集

select a,b,
rank() over (partition by b order by a) c 
from tbl
order by a;

这很好,因为您不需要在复杂的分区子句上进行计算,但是如果oracle引擎不重写代码,select from select将对性能产生影响,这是由第二级分析函数引起的。或者你可以写在一个单一的选择?嘿Ajith Sasidharan非常感谢老兄
select a,b,
rank() over (partition by b order by a) c 
from tbl
order by a;