2016-02-23 70 views
-1

這是數據庫數據。MYSQL根據所有其他列更新列

Name id Col1 Col2 Col3 Col4 Total Balance 
Row1 1 6  1  A  Z  7  7 
Row2 2 2  3  B  Z  8  1 
Row3 3 9  5  B  Y  7  2 
Row4 4 16 8  C  Y  7  3 

只有第一行的總數是準確的。我想用從Row2到Row4的條件更新列「Total」和「Balance」。

這是總結總列中的邏輯:

update Total = Col1+Col2 if Col3 = A and Col4 <>Z 
OR 
Total = Col1-Col2 if Col3 = B and Col4 <>Z 
OR 
Total = Col1*Col2 if Col3 = C and Col4 <>Z 

並更新餘額,餘額=先前的平衡+當前總

+0

現在看到正常化 – Strawberry

+0

您可以檢查答案在http://stackoverflow.com/questions/35647425/update-the-total-based-on-the-previous-row-of-balance –

回答

1

你的邏輯的改寫爲有效的查詢量:

UPDATE tbl SET total = 
    IF(Col3 = 'A' and Col4 <> 'Z', Col1 + Col2, 
    IF(Col3 = 'B' and Col4 <> 'Z', Col1 - Col2, 
    IF(Col3 = 'C' and Col4 <> 'Z', Col1 * Col2, total))), 
    balance = balance + total; 

您沒有寫出當這些條件都不符合時應該發生的情況,所以在這種情況下,我總是保留其先前的值,但仍然要加以平衡。

+0

這是完全不正確的,因爲我想總結以前的餘額,而不是總結當前的餘額與當前的總額 –

+0

好吧,從您寫的內容不清楚,您沒有從上面的行中完全寫出前一個餘額,這與以前的「價值」的平衡。爲了使你想要的東西你需要在SQL中使用循環,它不能用一個查詢來完成。我會在大約一小時內爲你改變它。 –

+0

可以肯定的是,你寫道:「只有第一行的總數是準確的」......所以你想保持第一行的總數,或者你想從所有其他行的列數中計算總數?只有餘額從0開始,第1行的餘額爲0 +總額,第2行的餘額爲balance_row1 + total_row2等?當這些條件都不符合時,總的價值應該是多少? –