我有一個表: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而不是正確答案:(... –