将(B列)的值乘以常数后,将值添加到新列(C列)

时间:2019-04-16 10:04:43

标签: oracle plsql

与某个常数相乘后,需要将 CHARGE 列的值保存在 TAX_AMNT 中。

| Charge   |   TAX_AMNT    |  Total_AMNT|
| 50       |    null       |     null   |
| 80       |    null       |     null   |
| 90       |    null       |     null   |
| 10       |    null       |     null   |

让我们说,我需要将负责人的值乘以恒定值 0.5 ,然后将值保存在tax_amnt中,最后让total_amnt负责+计算出的tax_amnt。

决赛桌看起来像这样。

| Charge   |   TAX_AMNT    |  Total_AMNT|
| 50       |    25         |     75     |
| 80       |    40         |     120    |
| 90       |    45         |     135    |
| 10       |    05         |     15     |

2 个答案:

答案 0 :(得分:1)

很多选择。

一种是使用两个连续的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_AMNTCHARGETOTAL_AMNT的值可能涉及的任何其他列也是如此。

只需在需要时查询并显示该值即可,例如

select tax_amnt, 
       charge, 
       tax_amnt + charge as total_amnt
from test

答案 1 :(得分:0)

您可以通过以下UPDATE更新这两列:

UPDATE TableName SET TAX_AMNT = (Charge * 0.5), Total_AMNT = Charge + (Charge * 0.5)