При необходимости обновить столбец category_alert_ctr
.
Чтобы проверить, нажмите здесь .
declare @A table(
category_alert_ctr int,
ram_category_code varchar(30),
RAM_GROUP varchar(30),
RAM_PARENT_CATEGORY_CODE varchar(30)
);
insert @A values
(25, 'HLTHLIC_FF', 'HEALTHLIC', null),
(28, 'M16', 'QBL', null),
(55, 'crm1b1', 'CRM1', null),
(55, 'crm1b1', 'CRM1', null),
(82, 'Area1', 'BuildApp', null),
(82, 'Area1', 'BuildApp', null);
declare @B table(
RAM_CATEGORY_CODE varchar(30),
RAM_GROUP varchar(30),
RAM_PARENT_CATEGORY_CODE varchar(30)
);
insert @B values
('HLTHLIC_FF', 'HEALTHLIC', 'HLTHLC_RST'),
('M16', 'QBL', 'EPA'),
('crm1b1', 'CRM1', 'CRM1b'),
('crm1b1', 'CRM1', 'crm1c'),
('Area1', 'BuildApp', 'OFC01'),
('Area1', 'BuildApp', 'OFC02');
with
a as (
select
*,
iif(
row_number() over(
partition by category_alert_ctr order by (select 0)
) = 1,
category_alert_ctr,
max(category_alert_ctr) over() +
row_number() over(order by category_alert_ctr) -
dense_rank() over(order by category_alert_ctr)
) new_category_alert_ctr,
row_number() over(
partition by category_alert_ctr order by (select 0)
) rn
from @A
),
b as (
select
*,
row_number() over(
partition by RAM_CATEGORY_CODE, RAM_GROUP
order by RAM_PARENT_CATEGORY_CODE
) rn
from @B
)
update a
set a.category_alert_ctr = a2.new_category_alert_ctr,
a.RAM_PARENT_CATEGORY_CODE = b.RAM_PARENT_CATEGORY_CODE
from a
join a a2
on a.category_alert_ctr = a2.category_alert_ctr and a.rn = a2.rn
join b
on a.RAM_CATEGORY_CODE = a.RAM_CATEGORY_CODE and
a.RAM_GROUP = b.RAM_GROUP and a.rn = b.rn
;
select * from @A;