根据多个条件更新单个列中的多个值

时间:2018-05-10 00:21:13

标签: sql sql-server

我想插入以下内容:

Jan = 0.08745  
Feb = 0.07605  
Mar = 0.08745  
Apr = 0.08365  
May = 0.09125  
Jun = 0.07985  
Jul = 0.08365  
Aug = 0.08745  
Sep = 0.07224  
Oct = 0.08745  
Nov = 0.08365  
Dec = 0.07985  

使用以下列进入表[Phasing]:

[DateKey](YYYYMM, int/not null),  
[VersionKey](XXXX, int/not null),  
[TypeKey](SmallInt, Not Null),  
[Multiplier](0.000, decimal(20,10))    

我想:

UPDATE [Phasing] 

SET [Multiplier] = 0.08745

WHERE 
[TypeKey] = 1
[VersionKey] = 1234
[DateKey] = 201801

SET [Multiplier] = 0.07605  

WHERE 
[TypeKey] = 1
[VersionKey] = 1234
[DateKey] = 201802  

etc....  

我需要在大约15个版本中为3x版本(1234,4321,9876)执行此操作。

我目前在第一个where子句中遇到语法错误:

"Incorrect syntax near 'VersionKey'."

1 个答案:

答案 0 :(得分:3)

每个语句只能执行一次UPDATE。因此,您的选项正在执行多个单独的更新,或者您可以使用CASE表达式执行单个更新:

UPDATE [Phasing] 
SET [Multiplier] = CASE WHEN [DateKey] = 201801
                        THEN 0.08745
                        WHEN [DateKey] = 201802
                        THEN 0.07605 END
WHERE
    [TypeKey] = 1 AND [VersionKey] = 1234 AND
    [DateKey] IN (201801, 201802);