SQL 服务器更新 Case When Then 语句

SQL Server Update Case When Then statment

我需要更新 table [Check_Result] 中的列 [Recipient on contract]。但是要插入到列中的值不是固定字符串,而是 [All_Contracts] table 中的值。因此,插入 [Recipient on contract] 的所有行都是唯一的,可以使用键 [ID Contract] = [Référence]

找到

tables [Check_Result][All_Contracts]之间的link是[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]

在这种情况下可以使用THEN吗?用 Update Case when then (select from inner join where) 语句?

谢谢

是的,CASE 语句中的每个值都可以替换为用“(”和“)”包围的嵌套 select 语句,即这是一个有效的语句:

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] table 得到哪个值?可以这样简化:

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

在那里你可以用(select SomeField from [All_Contracts] where [All_Contracts].[ID Contract] = [Check_Result].[Référence])替换[Professionnel de santé][Organisme]