Довольно много вариантов.
Один - использовать два последовательных оператора UPDATE
:
update test set
tax_amnt = charge * 0.5;
update test set
total_amnt = charge + tax_amnt;
Другой - сделать это за один UPDATE
:
update test set
tax_amnt = charge * 0.5,
total_amnt = (charge * 0.5) + charge;
Или вы могли бы даже использовать MERGE
:
merge into test t
using (select t1.charge * 0.5 tax_amnt,
t1.charge
from test t1
) x
on (t.charge = x.charge)
when matched then update set
t.tax_amnt = x.tax_amnt,
t.total_amnt = x.charge + x.tax_amnt;
Хотя это - очевидно - можно сделать, рассмотрим НЕ хранить TOTAL_AMNT
вообще (т.е. отбросить столбец).Несмотря на то, что nice имеет общий результат в таблице, требуется, чтобы вы постоянно поддерживали его значение.Что если вы обновите TAX_AMNT
?Будете ли вы помнить, что вам нужно пересчитать TOTAL_AMNT
?То же самое относится к CHARGE
и любому другому столбцу, который может быть включен в значение TOTAL_AMNT
.
Это простой вопрос запроса и отображения этого значения, когда вам это нужно, например,
select tax_amnt,
charge,
tax_amnt + charge as total_amnt
from test