Oracle 生成数
朋友们,我写了这段代码。它将生成srlnum,lotsrl。 srlnum是记录总数,lotsrl是5000之后从1到5000的记录 它将再次从1开始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,
/* 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;