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]
。
我需要更新 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]
。