2013-08-16 90 views
0

這就是我想要做的。基本上我有一些專欄在表Staging_X中故意留空,並稍後更新。我想用下面的case條件更新這些列。我想在存儲過程中實現這一點。使用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) 
+2

太多括號 – Jodrell

+0

如果'[NoMaterial]'欄總是依賴於其他列的值,你應該考慮將其更改爲[計算(http://technet.microsoft.com/en-us/library/ms191250(v = sql.105).aspx) –

+1

可以使用計算列,也可以通過將該計算視爲列,或者只是將此計算作爲插入的一部分。 – Ben

回答

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 
+0

SWEET !!!奇蹟般有效!謝謝! – Casperonian

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 
3

更簡單

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