在所有行中添加一个数字。 SQL查询

时间:2017-10-27 17:06:44

标签: sql oracle

假设我想在所有收入栏中增加2500美元奖金。如何实现它?例如

Old table:
id name     salary
1  John     8000
2  Labron   5000
3  Elvis    6000

New table:
id name     salary  SalaryWithBonus
1  John     8000    10500
2  Labron   5000    7500
3  Elvis    6000    8500

我必须使用PL / SQL函数吗?我是这个领域的新人,所以如果这个问题有点愚蠢,请不要生气。

2 个答案:

答案 0 :(得分:1)

添加列:

ALTER TABLE table_name
  ADD SalaryWithBonus DECIMAL(12,2);

填写字段:

UPDATE
    table_name
SET
   SalaryWithBonus = salary + 2500;

如下所示,如果薪水为NULL,您有两个选择。

  1. NULL视为0
  2. 不要为工资为NULL的人设置奖金。
  3. 选项1:

    UPDATE
        table_name
    SET
       SalaryWithBonus = COALESCE(salary,0) + 2500;
    

    选项2:

    UPDATE
        table_name
    SET
       SalaryWithBonus = salary + 2500
    WHERE 
        salary IS NOT NULL;
    

答案 1 :(得分:0)

这是另一种方法。有一个名为BONUS的表,有一个YEAR列。 您还可以每月存储奖金。

    CREATE TABLE OLD_TABLE
(ID NUMBER, NAME VARCHAR2(12), SALARY DECIMAL(18,2));

INSERT INTO OLD_TABLE values(1,'John',8000);
INSERT INTO OLD_TABLE values(2,'Labron',5000);
INSERT INTO OLD_TABLE values(3,'Elvis',6000);
INSERT INTO OLD_TABLE values(4,'Elvis2',NULL);

Create Table BONUS
(YEAR NUMBER, BONUS_AMT DECIMAL(18,2));

insert into BONUS VALUES('2016','2500');
insert into BONUS VALUES('2017','2500');

SELECT Id, Name, Salary, (NVL(salary,0) + BONUS_AMT) SalaryWithBonus FROM OLD_TABLE CROSS JOIN BONUS WHERE BONUS.YEAR = 2017