Oracle中本行记录和上一行记录进行比较lead over 函数处理
2013-11-26 22:12
465 查看
遇到问题:多表关联查询,有一个要求是,同一保单号,对应多个投资产品Code.以及投资比例,每一个保单号有一个总的投资金额。要求同一保单号那一行,只有第一个总金额有值,剩下的code对应的总金额置空。
简述问题:如果本行记录和上一行记录,某字段值相同,则怎么处理,另外一列的值。
样例SQL如下。
核心处理要点:
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置空。并按某某顺序。
简述问题:如果本行记录和上一行记录,某字段值相同,则怎么处理,另外一列的值。
样例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='0011' 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的row_number() over函数消除重复的记录
- 利用oracle中的MINUS函数和OVER函数,进行两个记录的比较
- 利用Oracle的row_number() over函数消除重复的记录
- 使用ORACLE开窗函数over()进行重复数据的删除【自用】
- 利用Oracle的row_number() over函数消除重 复的记录
- 记录---ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- 使用Oracle的row_number() over函数过滤重复数据,取最新的记录
- Summary_Oracle lag()/lead() over()分析函数
- 利用Oracle的row_number() over函数消除重复的记录
- Oracle 利用lead、lag函数查询已有记录的下一条、上一条记录
- Oracle SQL分析函数lag、lead解决相邻记录比较问题
- 利用Oracle的row_number() over函数消除重复的记录
- 利用oracle中的MINUS函数和OVER函数,进行两个记录的比较
- Oracle三个常见数字处理函数:Floor, Round, Trunc比较
- oracle 使用instr()函数对in查询出的记录按照in中的数据进行排序
- 利用Oracle的row_number() over函数消除重复的记录
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- Oracle分析函数over及开窗函数