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)
以下是查詢結果: