На сервере SQL это можно сделать с помощью оконных функций и обновляемого CTE:
with cte (
select
t.*,
max(case when status = 'Enabled' then 1 end)
over(partition by SubscriptionName) has_enabled
from mytable t
)
update cte
set ignore = 'True'
where status = 'Suspended' and has_enabled = 1
Условное окно max()
проверяет, существует ли другая строка с такими же SubscriptionName
и статусом 'Enabled'
.
Или вы можете использовать exists
:
update t
set ignore = 'True'
from mytable t
where
status = 'Suspended'
and exists (
select 1
from mytable t1
where t1.SubscriptionName = t.SubscriptionName and t1.status = 'Enabled'
)