zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/clarke157/p/6285567.html
Copyright © 2011-2022 走看看