![](/img/trans.png)
[英]Adding (count) sequence value to column value via trigger in Oracle SQL
[英]Adding sequence a Column in oracle
我有一张桌子:TENDERINFO。 有列OrderNo,Tender,TenderSequence
我需要从1开始更新TenderSequence,然后继续直到OrderNo中的订单项数量。
我该如何实现?
因此,我们将按OrderNo对行进行“分组”编号。 我不知道Tender或TenderSequence是否可以充当数据的排序列,所以我只使用OrderNo。 这显示了使用窗口函数row_number()获取行号:
select
OrderNo, Tender, TenderSequence,
row_number() over (partition by OrderNo order by OrderNo asc ) rownumber,
TenderSequence + row_number() over (partition by OrderNo order by OrderNo asc ) TS_RowNum_ADD
from
TENDERINFO
WITH cte as (
SELECT OrderNo,
Tender,
ROW_NUMBER() OVER ( ORDER BY OrderNo ) as rn,
ROW_NUMBER() OVER ( PARTITION BY OrderNo ORDER BY OrderNo ) as rn2
FROM TENDERINFO
)
UPDATE TENDERINFO T
SET TenderSequence = (SELECT c.rn
FROM cte c
WHERE c.OrderNo = T.OrderNo
AND c.Tender = T.Tender
)
不知道您需要哪个row_number。
您的问题尚不清楚,每个OrderNo
是否可以有多个Tender
在这种情况下,您可以使用
OVER ( ORDER BY OrderNo, Tender )
要么
OVER ( ORDER BY OrderNo, TenderSequence )
如果您只是尝试按顺序设置表,则从最小的OrderNo的1开始到number_of_rows到最大的OrderNo的序列,可以通过以下查询来实现:
merge into tenderinfo t
using (
select
orderno,
rownum rn
from (select orderno from TENDERINFO order by orderno)
) seq on (seq.orderno = t.orderno )
when matched then
update set t.tendersequence = seq.rn ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.