2016-02-23 120 views
0
Name id Col1 Col2 Col3 
Row1 1 6  1  A  
Row2 2 2  3  B  
Row3 3 9  5  B  
Row4 4 16 8  C  

多行我想更新與狀態欄。SQL更新條件

在第一行,

update col2 = Col1+0 if Col3 = A 
OR 
col2 = Col1-0 if Col3 = B 
OR 
col2 = Col1*0 if Col3 = C 

在第二排,

update col2 = (previous col2) + Col1 if Col3 = A 
OR 
col2 = (previous col2) - Col1 if Col3 = B 
OR 
col2 = (previous col2) * Col1 if Col3 = C 

同樣進入第三排

+0

MySQL的..感謝回覆 –

回答

1

我認爲你可以做你想做的一個case語句和變量:

set @prev_col2 = 0; 

update t 
    set col2 = (case when (@col2 := @prev_col2) = NULL then -1 -- never happens 
        when (@prev_col2 := col2) = NULL then -1 -- never happens 
        when col3 = 'A' then Col1 + @col2 
        when col3 = 'B' then Col1 - @col2 
        when Col3 = 'C' then col1 * @col2 
       end) 
    order by id; 
+0

爲什麼重複?當(@ COL2:= @ prev_col2)= NULL然後-1 - 從未發生 時(@ prev_col2:= COL2)= NULL然後-1 - 從未發生 –

+0

@LimNeo。 。 。因爲變量需要分配適當的值。 –

+0

MySQL表示:文件 #1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊「=(情況下(@ COL2:= @ prev_col2)= NULL,則-1 時(@prev」第2行 –