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;
DB2中coalesce函数的应用的更多相关文章
- SQL Server中COALESCE函数的用法
在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELEC ...
- 关于db2中listagg函数开发中的体验
一.首先解释一下可能会查询的基础问题: 1.1db2 “with ur”是什么意思: 在DB2中,共有四种隔离级:RS,RR,CS,UR.以下对四种隔离级进行一些描述,同时附上个人做试验的结果.隔离级 ...
- Oracel中coalesce函数的用法
1.coalesce函数的用法 1.1 取出第一个不为空的列的数据.
- MYSQL中coalesce函数的用法
coalesce():返回参数中的第一个非空表达式(从左向右依次类推): 例如: select coalesce(null,4,5); // 返回4 select coalesce(null,null ...
- db2中left()函数和right()函数对应oracle中的substr()函数
DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LEFT.RIGHT函数返回ARG最左边.右边的LENGTH个字符串,ARG可以是CHA ...
- [代码]--db2中left()函数和right()函数对应oracle中的substr()函数
DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LEFT.RIGHT函数返回ARG最左边.右边的LENGTH个字符串,ARG可以是CHA ...
- DB2中OLAP函数使用示例
下面的需求是将不仅获取查询的结果集,还要将结果集的SIZE返回.结果集的SIZE是无法通过CURSOR获取的. 通常聚合函数在二种情况下,使用默认分组即没有分组.可以直接使用,比如 selec ...
- SqlServer coalesce函数
SqlServer数据库中coalesce函数用法:在SqlServer2005中有了新的函数,它非常的实用,它就是coalesce函数,此函数可以返回参数中的第一个非空表达式,当你要在N个字段中选取 ...
- (转)DB2中的一些函数
DB2中的一些函数 原文:https://www.cnblogs.com/ShaYeBlog/archive/2012/08/27/2658025.html 最近用DB2,数据库之间的差异还是很大的, ...
随机推荐
- Ubuntu系统中初次下载Android源码的一点经验
这阵子突然心血来潮,想看看android的源代码,所以这一两天晚上都在折腾下载这个东西. (其实在GitHub上可以在线看的,不过不太喜欢在线看,URL附上 https://github.com/an ...
- 关于LAMP的配置之(虚拟机的安装、创建、配置)
一.先安装好VMware (1)根据电脑系统是多少位的,可以从网上下载相应的虚拟机VMware (2)下载好了之后,就可以先行安装虚拟机,双击打开VMware的安装程序 (3)再出现的对话框中,点击& ...
- C#简单验证并限制登录次数小示例
描述:提示用户输入用户名,密码,与数据库中的数据匹配,如果正确则提示登陆成功,否则,提示登陆失败 错误次数超过三次,提示登陆次数过多,禁止登陆 数据表示例: //数据库中ErrorTimes的次数增加 ...
- codewars-random(3)
思路:两个嵌套的for循环(不推荐,应该有更好的.) 具体代码:function longestConsec(strarr, k) { // your code var n = strar ...
- JavaScript的this详解
1.全局作用域下的this: 2.一般函数与严格模式下的函数的this: 3.当函数的this作为对象的方法的情况下: 4.对象原型链上的this: 对象P的原型指向o, p.a与p.a创建对象p的属 ...
- Ubuntu中Qt+opencv图像显示
先抛出一个疑问,知道的希望留言解答下 (创建Application->Qt Console Application,代码与下面2.3一样,运行有时会显示图片,但大多数不显示,为什么?) 1.打开 ...
- web前端入门
看到很多同学在咨询:学习前端该怎么入门啊.推荐一下前端入门书籍啊什么的,作为一个过来人,我想告诉你一些小小技巧,避免走弯路: 1.先敲再学.如果你是零基础,就不要去每个标签,每个属性地去抠,因为里面有 ...
- PNG文件转png8
png8比普通png图片会小很多,所以在开发中为了是图片加载速度更快我们可以把Png图片都转成png8 首先添加 ImageProcessor 包 private byte[] ConvertTo ...
- wuzhicms 数据迁移策略
1,本地的域名或ip为特殊域名或ip,勿用 127.0.0.1 或 localhost 或192.168.1.101 等 2,导出数据库,替换所有域名为新域名 3,替换所有文件域名为新域名 4, ...
- erlang虚拟机代码执行原理
转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...