Вы можете использовать row_number в соответствии с предложением Mitch Wheat, чтобы выяснить значения
вот пример кода, который разбивает его на
Затем вы можете использовать результат для обновления исходной таблицы
;with mycte as (
select
580 as ID , 'SSSACCT' as code, 111 as value
union all select
580, 'SSSACCT', 112
union all select
580 , 'TIX', 10
union all select
580 , 'TIX' , 30
union all select
35 , 'SSSACCT', 345
union all select
35 , 'SSSACCT', 344
union all select
35 , 'SSSACCT' , 433
union all select
35 , 'SSSACCT', 221
)
, mycte2 as (
Select mycte.* , ROW_NUMBER() over(partition by code, ID order by ID) as row_num
from mycte
)
Select
mycte2.*
, concat(replace(code,'CT',''),row_num) as new_code
from mycte2