Oracle-SQL-按月统计自助终端交易量
SQL实现的目标:
基本情况 | 现金交易情况 | 转账情况 | 转账交易情况(明细) | 其它业务情况 | 交易量汇总 | 日均交易量 | 交易金额 | 绩效情况(万元) | ||||||||||||||||||||
支行名 | 支行号 | 所属网点 | 网点号 | 管理员帐户 | 管理员 | 终端编号 | 取款笔数 | 取款金额 | 存款笔数 | 存款金额 | 转账笔数 | 转账金额 | 卡卡笔数 | 卡卡金额 | 卡折笔数 | 卡折金额 | 折卡笔数 | 折卡金额 | 折折笔数 | 折折金额 | 代缴费笔数 | 代缴费金额 | 查询笔数 | 存款余额(月日均) | 存款余额(月日均比上月) | |||
巴南支行 | 10 | 101302 | 东泉分理处 | 402230080416813378 | 骆涌 | 23003326 | 127 | 151950 | 51 | 43300 | 7 | 13562 | 0 | 0 | 0 | 0 | 3 | 3080 | 4 | 10482 | 0 | 0 | 253 | 438 | 16 | 208812 | 21.02 | 0.19 |
巴南支行 | 10 | 103201 | 跳石分理处 | 402230080344302189 | 万敏 | 23001874 | 357 | 294062 | 80 | 327320 | 14 | 100510 | 0 | 0 | 0 | 0 | 4 | 27000 | 10 | 73510 | 0 | 0 | 754 | 1205 | 43 | 721892 | 295.22 | 9.01 |
巴南支行 | 10 | 100401 | 木洞分理处 | 402230080350688018 | 唐自利 | 23001620 | 674 | 512739.4 | 295 | 534862 | 25 | 206080 | 0 | 0 | 3 | 18500 | 4 | 30180 | 18 | 157400 | 0 | 0 | 1541 | 2535 | 91 | 1253681 | 228.96 | 0.48 |
规则, 每天每种交易最多统计3笔
完成按月统计任务
用到的知识点总结:
1) case when的使用;
case when count(transQK.tran_amt) > 3 then 3 else count(transQK.tran_amt) end count case when dayQK.count is null then 0 else dayQK.count end
2)left join的使用; left join 中可以写where 的条件
--外连接取款 left join ( select case when sum(dayQKIn.count) is null then 0 else sum(dayQKIn.count) end count, case when sum(dayQKIn.money) is null then 0 else sum(dayQKIn.money) end money, term_id_in from ( select case when count(transQK.tran_amt) > 3 then 3 else count(transQK.tran_amt) end count, case when sum(transQK.tran_amt) is null then 0 else sum(transQK.tran_amt) end money, to_char(to_date(transQK.p_req_date, ‘yyyyMMdd‘), ‘dd‘) p_req_date, term_id_in from BIZ_OPER_TRANS transQK where -- 取款 便民取款 (transQK.P_TRANS_CODE=‘1011101‘ or transQK.P_TRANS_CODE=‘1011231‘) and transQK.p_req_date between to_char(add_months(last_day(sysdate)+1,-2),‘yyyyMMdd‘) and to_char(add_months(last_day(sysdate),-1),‘yyyyMMdd‘) group by term_id_in,P_TRANS_CODE,to_char(to_date(transQK.p_req_date, ‘yyyyMMdd‘), ‘dd‘) ) dayQKIn group by dayQKIn.term_id_in ) dayQK on dayQK.term_id_in=term.TERMINAL_ID
3) 时间函数 表示 上个月第一天 、 上个月最后一天
transCX.p_req_date between to_char(add_months(last_day(sysdate)+1,-2),‘yyyyMMdd‘) and to_char(add_months(last_day(sysdate),-1),‘yyyyMMdd‘)
4)四舍五入 月笔数/天数
round(( case when dayQK.count is null then 0 else dayQK.count end + case when dayCK.count is null then 0 else dayCK.count end + case when dayZZ.count is null then 0 else dayZZ.count end + case when dayDJ.count is null then 0 else dayDJ.count end + case when dayCX.count is null then 0 else dayCX.count end ) /(1+to_char(add_months(last_day(sysdate),-1),‘yyyyMMdd‘)-to_char(add_months(last_day(sysdate)+1,-2),‘yyyyMMdd‘)),2)
5) 最终的SQL
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。