Oracle中本行记录和上一行记录进行比较lead over 函数处理
遇到问题:多表关联查询,有一个要求是,同一保单号,对应多个投资产品Code.以及投资比例,每一个保单号有一个总的投资金额。要求同一保单号那一行,只有第一个总金额有值,剩下的code对应的总金额置空。
简述问题:如果本行记录和上一行记录,某字段值相同,则怎么处理,另外一列的值。
样例SQL如下。
select rownum 序号 ,
ld.comcode 分公司,
'B2B' 来源,
ed.tranno 银行交易号,
(select bb.newcontno
from b2b_contno bb
where trim(bb.oldcontno) = trim(lc.contno)) 保单号新,
lc.contno 保单号旧,
lc.appntname 投保人,
ms.pol_status 保单状态,
ed.makedate 客户申请日期,
ms.UPD_DATE 保全受理日期,
lead(to_char(ed.fingetamt),(select count(*)-1 from EdorAPDetail),null) over (partition by lc.contno order by lc.contno) as 购买总金额,
ea.accountcode 基金代码,
(select b.CODE_DES from bankandinsurercodemapping b where b.COMCode = 'ICBC'
and b.CODETYPE = 'accounttype' and trim(b.BANK_CODE) = trim(ea.accountcode)) 基金名称,
ea.accountpercent 购买比例,
'现金' 支付方式,
ed.bankcode 银行代码,
ed.accnumber 账号,
ed.bak1 户名,
ld.name 营业单位,
la.agentcom 代理人编号,
la.name 代理人姓名,
ed.appntphone 投保人电话
from lccont lc, --日志表
lacom la, --银行代理机构表
edoraddinsure ed, --保全业务表
ldcom ld, --保险分公司表
B2B_ITF_T_POL_MST ms, --ODS推数表
EdorAPDetail ea where ed.funcflag in (1020)
and lc.agentcom = la.agentcom
and ld.comcode = la.managecom
and ms.comp_code=ld.comcode and trim(ed.bankcode) = trim(lc.newbankcode)
and ed.bankcode='' and trim(lc.contno) = trim(ed.contno)
and trim(ms.pol_no) = trim(ed.contno)
and trim(ea.contno) = trim(ed.contno)
核心处理要点:
lead(to_char(ed.fingetamt),(select count(*)-1 from EdorAPDetail),null) over (partition by lc.contno order by lc.contno) as 购买总金额,
心得:Oracle中lead (mm,1,null) over(partition by bb order by tt)函数。本行记录和上一行记录比较,partition by lc.contno相同的话,就给ed.fingetamt置空。并按某某顺序。
Oracle中本行记录和上一行记录进行比较lead over 函数处理的更多相关文章
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- oracle中查找和删除重复记录的几种方法总结
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...
- Oracle中的二进制、八进制、十进制、十六进制相互转换函数
原文:Oracle中的二进制.八进制.十进制.十六进制相互转换函数 Oracle中的二进制.八进制.十进制.十六进制相互转换函数 今天在网上看到一篇关于在oracle中对各种进制数进行转换的帖子, ...
- Oracle 中按条件过滤重复记录
在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...
- Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)
原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...
- ORACLE中的MERGE语法使用记录
项目中使用到了Oracle的MERGE INTO语句,在这里简单记录下使用方法 使用场景如下: 存在对一张数据量很大的表,你需要对里面的大量数据进行更新,如果数据不存在,就进行插入的操作. 常规想到的 ...
- Oracle中查询前10条记录
在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 ----说明:rownum只能用于<或<=运算,如 ...
- Oracle中查询和删除相同记录的3种方法
--创建测试表 )); ,'); ,'); ,'); ,'); ,'); ,'); commit; select * from test; --查询相同记录 ); select id,name fro ...
- oracle中replace、length、lengthb、substr、substrb函数
1.replacereplace(x,y,z)返回值为将字符串X中的Y串用Z串替换后的结果字符串. replace(x,y)返回值将字符串X中为Y串的地方删除例:epacel('aaabbb','bb ...
随机推荐
- iOS 消息转发
消息转发 delegate和protocol 类别 消息转发 当向someObject发送某消息,但runtime system在当前类和父类中都找不到对应方法的实现时,runt ...
- AndroidManifest.xml 配置权限大全
问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissi ...
- Java数据结构之排序
1.冒泡排序:时间复杂度为O(n2) 假设是由小到大排序:相邻两个数之间进行比较,较大的数在后面.一次比较过后最大的数排在最后面 如:40.8.15.18.12一次排序后为:8.15.18.12.40 ...
- Java基础复习之二:运算符,键盘录入,流程控制语句,if语句,三元运算
1.运算符 1.1.算术运算符 +(加法有三个用法:加法,正号,字符串连接符) - * / % ++ -- 1.1.1./ 是取商,%是取余 1.1.2.++ 与--的用法(a:作用是自 ...
- github简单使用教程(转)
github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O ...
- 《大道至简-Team》
已经学习了<大道至简>两章,我们了解了编程的本质和“懒人”造就了方法.书中没有提供给我们编程的技巧,捷径,而是从别的方面为我们讲解了编程的精义.第三章就为我们引入了“团队”这个概念. 我们 ...
- 使用 httpkit 来替代 jetty
Compojure 是一个基于 ring 的上层web开发框架.在 lein new compojure my-app 生成的项目中,默认是启用 jetty 服务器的,最近用到了 http-kit 中 ...
- 《OD学oozie》20160813
一.日志收集项目案例 1. oozie中依赖jar包 在工作目录下创建lib目录,上传依赖包的lib目录下 2. 作业 将日志收集与处理项目案例使用oozie的workflow执行 3. coordi ...
- MoreLinq和Linq
MoreLinq里的Batch和Partition不知道什么区别. var ints =Enumerable.Range(1,10); var result = ints.Batch(3); var ...
- 安卓WebView中接口隐患与手机挂马利用(远程命令执行)
安卓应用存在安全漏洞,浏览网站打开链接即可中招.目前有白帽子提交漏洞表明目前安卓平台上的应用普遍存在一个安全漏洞,用户打开一个链接就可导致远程安装恶意应用甚至完全控制用户手机,目前微信,手机QQ,QV ...