admin管理员组文章数量:1794759
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
版权声明:本文标题:oracle某几列数据进行相加,oracle 基础知识:两个number列相加 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686506696a75236.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论