Вы можете использовать order by
:
select row_number() over (order by (select null)) as id, t.list_1
from t
order by (case when list_1 is not null then 1 else 2 end)
Неясно, почему вы хотите id
изменить значения, но вы можете использовать row_number()
для этого.
EDIT:
Если вы хотите изменить id
, то вы можете сделать:
with toupdate as (
select row_number() over (order by (case when list_id is not null then 1 else 2 end), id
) as new_id,
t.*
from t
)
update toupdate
set id = new_id
where id <> new_id; -- no need to update if the value remains the same