Обновить одну строку на основе значения в другой строке - PullRequest
0 голосов
/ 05 мая 2020

У меня есть таблица со следующими столбцами и значениями:

SubscriptionName, Status, Ignore
Project Plan 3 for faculty, Enabled, Null
Project Plan 3 for faculty, Suspended, Null

Как мне обновить столбец Ignore до True для приостановленной записи, если есть 2 записи с одинаковыми subscriptionName а другая запись имеет значение Enabled в Status

1 Ответ

1 голос
/ 05 мая 2020

На сервере 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'
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...