Oracle 第一个字段为空,取第二个字段,如果第二个字段为空取第三个字段...... (nvl函数详解及嵌套或者coalesce函数的使用)
Nvl函数详解
写法如下:Nvl(name1,name2),nvl函数有两个参数,如果第一个参数返回不为null,则返回第一个参数的值,如果第一个参数返回的值null,则nvl函数返回第二个参数的值,如果两个都是null,则返回null
select nvl('1','') from dual ===》 1
select nvl('1','2') from dual ===》 1
说明:以上两种情况是第一个参数不为空,返回第一个参数的值
select nvl('','2') from dual ===》 2
说明:第一个参数为空,返回第二个参数的值
select nvl('','') from dual ===》 null
说明:都为空则返回null
如果能理解以上的方法理解了,那么coalesce函数就是nvl函数的嵌套使用
写法如下:coalesce(name1,name2,name3,name4........)
第一个字段为空,取第二个字段,如果第二个字段为空取第三个字段......
基本写法就是nvl函数的嵌套,我们根据nul的特性如果两个参数返回的值都null,则返回null,只要遇到不为空的就返回对应的结果。写法如下:
第一种写法:nvl(nvl(Nvl(name1,name2),name3),name4)
第二种写法:coalesce(name1,name2,name3,name4)
说明:这样嵌套直到遇到不为空的数据返回对应的值
下面是具体的案例,以第一种为例:
select t.*, nvl(nvl(nvl(bond_code, cash_code), repo_code), fund_code)
from (select bs.i_code,
bs.rt_l_avaamount,
bs.m_type,
bs.a_type,
b.i_code bond_code,
c.i_code cash_code,
i.i_code repo_code,
f.i_code fund_code
from xir_trd.ttrd_acc_balance_secu bs
left join xir_md.tbnd b
on b.i_code = bs.i_code
left join xir_trd.ttrd_cashlb c
on c.i_code = bs.i_code
left join xir_trd.ttrd_otc_iblb i
on i.i_code = bs.i_code
and bs.rt_l_avaamount >= 0
left join xir_md.tfnd f
on f.i_code = bs.i_code
where bs.accid = 'xecs_nbzq') t
where (bond_code is not null or cash_code is not null or
repo_code is not null or fund_code is not null)
以下是查询结果: