oracle某几列数据进行相加,oracle 基础知识:两个number列相加

1查看表结构

SQL> desc teachers;

Name          Type        Nullable Default Comments

------------- ----------- -------- ------- --------

TEACHER_ID    NUMBER(5)

NAME          VARCHAR2(8)

TITLE         VARCHAR2(6) Y

HIRE_DATE     DATE        Y        sysdate

BONUS         NUMBER(7,2) Y

WAGE          NUMBER(7,2) Y

DEPARTMENT_ID NUMBER(3)   Y

2查看表的数据

SQL> select * from teachers;

TEACHER_ID NAME     TITLE  HIRE_DATE       BONUS      WAGE DEPARTMENT_ID

---------- -------- ------ ----------- --------- --------- -------------

10101 王彤     教授   1990/9/1      1000.00   3000.00           101

10104 孔世杰   副教授 1994/7/6       800.00   2700.00           101

10103 邹人文   讲师   1996/1/21      600.00   2400.00           101

10106 韩冬梅   助教   2002/8/1       500.00   1800.00           101

10210 杨文化   教授   1989/10/3     1000.00   3100.00           102

10206 崔天     助教   2000/9/5       500.00   1900.00           102

10209 孙晴碧   讲师   1998/5/11      600.00   2500.00           102

10207 张珂     讲师   1997/8/16      700.00   2700.00           102

10308 齐沈阳   高工   1989/10/3     1000.00   3100.00           103

10306 车东日   助教   2001/9/5       500.00   1900.00           103

10309 臧海涛   工程师 1999/6/29      600.00   2400.00           103

10307 赵昆     讲师   1996/2/18      800.00   2700.00           103

10128 王晓            2007/9/5                       1000.00           101

10328 张笑            2007/9/29                     1000.00           103

10228 赵天宇          2007/9/18                    1000.00           102

11111 林飞            2007/10/11                   1000.00

3计算教师月收入,基本工资+奖金

SQL> select t.name as "姓名", t.bonus+t.wage as "月总收入" from teachers t;

姓名           月总收入

-------- ----------

王彤           4000

孔世杰         3500

邹人文         3000

韩冬梅         2300

杨文化         4100

崔天           2400

孙晴碧         3100

张珂           3400

齐沈阳         4100

车东日         2400

臧海涛         3000

赵昆           3500

王晓

张笑

赵天宇

林飞

16 rows selected

这里可以看到,在奖金为NULL的列上,虽然都为number类型,但这位老师的月收入为空了。显然是不对的。oracle没有默认的实现这个功能。

这个时候需要我们采用nvl函数来给列设置默认值,假如是空的,默认为零

SQL> select t.name as "姓名", nvl(t.bonus,0)+t.wage as "月总收入" from teachers t;

姓名           月总收入

-------- ----------

王彤           4000

孔世杰         3500

邹人文         3000

韩冬梅         2300

杨文化         4100

崔天           2400

孙晴碧         3100

张珂           3400

齐沈阳         4100

车东日         2400

臧海涛         3000

赵昆           3500

王晓           1000

张笑           1000

赵天宇         1000

林飞           1000

16 rows selected

这样就对了。

还可以使用nvl2函数

SQL> select t.name as "姓名" ,nvl2(t.bonus,t.bonus+t.wage,t.wage) as "总收入" from teachers t;

姓名            总收入

-------- ----------

王彤           4000

孔世杰         3500

邹人文         3000

韩冬梅         2300

杨文化         4100

崔天           2400

孙晴碧         3100

张珂           3400

齐沈阳         4100

车东日         2400

臧海涛         3000

赵昆           3500

王晓           1000

张笑           1000

赵天宇         1000

林飞           1000

16 rows selected

还可以利用coalesce函数(返回表达式中第一个非空值,如果都为空,则返回为空)来计算教师的月收入:

SQL> select t.name as "姓名" ,nvl2(t.bonus,t.bonus+t.wage,t.wage) as "总收入" from teachers t;

姓名            总收入

-------- ----------

王彤           4000

孔世杰         3500

邹人文         3000

韩冬梅         2300

杨文化         4100

崔天           2400

孙晴碧         3100

张珂           3400

齐沈阳         4100

车东日         2400

臧海涛         3000

赵昆           3500

王晓           1000

张笑           1000

赵天宇         1000

林飞           1000

16 rows selected

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值