SQL Server Обновление Ситуация Когда Тогда - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно обновить столбец [Recipient on contract] в таблице [Check_Result]. Но значение для вставки в столбец - это не фиксированная строка, а значение из таблицы [All_Contracts]. Таким образом, все строки для вставки в [Recipient on contract] являются уникальными и могут быть найдены с помощью клавиш [ID Contract] = [Référence]

Связь между таблицами [Check_Result] и [All_Contracts]: [ID Contract] = [Référence]

Update [Check_Result]   
set [Recipient on contract] =
 If [Bénéficiaire] ="Personne morale" Then
            If [Organisme]  is not null Then get [Organisme] 
            Else get [Professionnel de santé]
        Else 
            If [Professionnel de santé] is not null Then get [Professionnel de santé]
            Else get [Organisme]

Можно ли использовать ТОГДА в такой ситуации? с Update Case when then (select from inner join where) заявлением?

Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Да, каждое из значений в CASE операторе может быть заменено вложенным оператором выбора, окруженным '(' и ')', то есть это допустимый оператор:

update table1 set
    field1 = CASE WHEN field2 = 'some value'
                  THEN (select field1 from table2 where table1.key_field = table2.key_field) 
                  ELSE 'some default value'
             END

Вы можете сделать то же самое с IIF оператором также

update table1 set
    field1 = IIF(field2 = 'some value',
                  (select field1 from table2 where table1.key_field = table2.key_field),
                  'some default value')

Ваше заявление об обновлении не совсем ясно. Какое значение вы хотите получить из таблицы [All_Contracts]? Это можно упростить так:

Update [Check_Result] set
    [Recipient on contract] = IIF([Bénéficiaire] = "Personne morale",
        COALESCE([Organisme], [Professionnel de santé]), 
        COALESCE([Professionnel de santé], [Organisme]))

Там вы можете заменить [Professionnel de santé] или [Organisme] на (select SomeField from [All_Contracts] where [All_Contracts].[ID Contract] = [Check_Result].[Référence]).

...