我有一个表:TENDERINFO。有列OrderNo,Tender,TenderSequence在oracle中添加序列a列
我需要更新TenderSequence从1开始,直到订单号中的订单项数量。
我该如何做到这一点?
我有一个表:TENDERINFO。有列OrderNo,Tender,TenderSequence在oracle中添加序列a列
我需要更新TenderSequence从1开始,直到订单号中的订单项数量。
我该如何做到这一点?
所以我们打算通过OrderNo进行行编号“分组”。我无法判断Tender或TenderSequence是否可以作为数据的排序列,因此我只是使用OrderNo来完成。这表明越来越使用窗口函数ROW_NUMBER()的ROWNUMBER:
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到number_of_rows的1开始到最大的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 ;
'update x inner join y'在Oracle中不是有效的语法。它可以在SQL Server中完美工作。 –
@JustinCave是的,我刚刚看到。我从问题中复制syntaxis而不是正确答案:(... –