使用CASE语句更新多行

时间:2013-08-16 11:15:47

标签: sql sql-server stored-procedures

这就是我想要做的。基本上我在表Staging_X中故意将一些列留空并稍后更新。我想使用下面的case条件更新这些列。我想在存储过程中实现它。

UPDATE Staging_X 
   SET Staging_X.[NoMaterial]
      (SELECT (case 
                 when ((([Up]+[Test])+[Mon])+[Down_percentage])*(1.68)=(0) 
                 then (168) else [Lost]*(1.68) 
               end) 
         FROM Staging_X)

3 个答案:

答案 0 :(得分:5)

UPDATE Staging_X 
SET [NoMaterial] = 
    case when [Up]+[Test]+[Mon]+[Down_percentage]=0 
    then 168 else [Lost]*1.68 end
WHERE [NoMaterial] is null

答案 1 :(得分:3)

如果我理解正确,你不需要像这样选择,因为值都在同一行。

所以尝试像

这样的东西
UPDATE  Staging_X 
SET     Staging_X.[NoMaterial] = 
        case 
            when ((([Up]+[Test])+[Mon])+[Down_percentage])*(1.68)=(0) 
                then (168) 
            else [Lost]*(1.68) 
        end

答案 2 :(得分:3)

更简单

UPDATE [Staging_X] 
    SET [NoMaterial] =
        CASE [Up]+[Test]+[Mon]+[Down_percentage]
             WHEN 0 THEN 168
             ELSE [Lost] * 1.68 
        END