DB2中coalesce函數的應用


在ETL項目中經常會碰到這樣的一種情況:

目標表中的某列來源於不同的源數據表A,B,C.如果在A中沒有有效的數據則從B中取,如果B中沒有則從C中取,如果C中也沒有則設置為空值。

遇到這樣的情況可能,有時候第一個念頭就是case when then else end這樣的方式,這種方式也可以解決問題,但是寫起來還是比較復雜,容易出錯,特別是當別人看你寫的SQL的時候會頭疼。

那么有沒有更好的辦法呢?

那就是coalesce函數。

COALESCE函數可以替代CASE語句,而且比CASE要方便得多,COALESCE格式:COALESCE (expression_1, expression_2, ...,expression_n)。

第一個非空的表達式是函數的返回值,如果所有的表達式都是空值,最終將返回一個空值。

下面舉個項目中實際例子:

問題描述:目標表某列數據來源於HR.MGR_ENTITYCODE, PS.BRAND_CD, PS.ORG,如果HR.MGR_ENTITYCODE沒有為空則從 PS.BRAND_CD, PS.ORG取值,如果都為空則返回空值。

SQL如下:

SELECT CI.RESOURCE_ID, COALESCE(HR.MGR_ENTITYCODE, PS.BRAND_CD, PS.ORG) CAL_BRAND_CD,CI.BRAND_CD
FROM 
TESTENV.CR__ITEMS AS CRI LEFT OUTER JOIN TESTENV.PR_ITEMS AS PRI ON CI.PO_KEY = PRI.PO_KEY
LEFT OUTER JOIN TESTENV.PURCHASE_SUMMARY AS PS ON PRI.PO_KEY = PS.PO_KEY AND PRI.PO_ITEM_NUM = PS.PO_M_NUM
LEFT OUTER JOIN TESTENV.HR_CLD_CONT AS HR ON CI.RESOURCE_ID = HR.RESOURCE_ID
WITH UR;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM