Это должно в основном хотеть, чтобы вы хотели:
select t.*,
to_char(floor(row_number() over (partition by pdf
order by pdf_suf_number, pdf_seq_number
) / 100
), '00'
) as new_pdf_suf_number,
to_char(mod(row_number() over (partition by pdf
order by pdf_suf_number, pdf_seq_number
) - 1, 100
), '00'
) as new_pdf_seq_number
from t;
Единственное отличие состоит в том, что он начинается с 00
, а не 01
. Это имеет больше смысла для меня, потому что это позволяет вам увеличивать после 100 вместо 99.
Вы можете обнаружить, что самый простой подход - просто сохранить вышеупомянутые (или, вернее, нужные вам столбцы) в новую таблицу, используя create table as
. UPDATE
с медленнее, чем воссоздание всей таблицы.
Вы можете обновить значения, используя:
update t
set (pdf_suf_number, pdf_seq_number) =
(select to_char(floor(row_number() over (partition by pdf order by pdf_suf_number, pdf_seq_number) / 100), '00') as new_pdf_suf_number,
to_char(mod(row_number() over (partition by pdf order by pdf_suf_number, pdf_seq_number) - 1, 100), '00') as new_pdf_seq_number
from t t2
where t2.rowid = t.rowid
);