2016-02-23 2 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.

Это логика подвести общий столбец:

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

Чтобы быть уверенным, вы написали: «Только тотальная строка первой строки точна» ... так что вы хотите сохранить общее количество в первой строке или хотите подсчитать общее количество из cols, как на всех остальных строках? Только начало баланса на 0, row1 имеет баланс 0 + total, строка 2 имеет balance_row1 + total_row2 и т. Д.? Кроме того, какова должна быть общая сумма, когда ни одно из этих условий не выполняется? –

Смежные вопросы