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的使用;
else count(transQK.tran_amt) end count else dayQK.count end
2)left join的使用; left join 中可以写where 的条件
--外连接取款
left join
(
select
else sum(dayQKIn.count) end count,
else sum(dayQKIn.money) end money,
term_id_in
from
(
select
else count(transQK.tran_amt) end count,
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')
,),),'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 ,),),'yyyyMMdd')
4)四舍五入 月笔数/天数
else dayQK.count end +
else dayCK.count end +
else dayZZ.count end +
else dayDJ.count end +
else dayCX.count end )
),,),)
5) 最终的SQL
-----------------------------------终极版终结版-------------------------------------------------------
-- 每月每种交易最多统计3笔
-- T05 便民终端
select
parent.inst_code 支行号,
parent.inst_name 支行名,
inst.inst_code 网点号,
inst.inst_name 网点名,
term.admin_Acct 管理员账户 ,
term.admin_Name 管理员,
term.terminal_id 终端号,
else dayQK.count end 取款笔数,
else dayQK.money end 取款金额,
else dayCK.count end 存款笔数,
else dayCK.money end 存款金额,
else dayZZ.count end 转账笔数,
else dayZZ.money end 转账金额,
else dayDJ.count end 代缴笔数,
else dayDJ.money end 代缴金额,
else dayCX.count end 查询笔数,
-- 汇总
else dayQK.count end +
else dayCK.count end +
else dayZZ.count end +
else dayDJ.count end +
else dayCX.count end 总笔数,
-- 这里用了四舍五入
else dayQK.count end +
else dayCK.count end +
else dayZZ.count end +
else dayDJ.count end +
else dayCX.count end )
),,),) 日均笔数,
--
else dayQK.money end +
else dayCK.money end +
else dayZZ.money end +
else dayDJ.money end 总金额
--
from
ops_device_info device ,ops_institution inst,ops_institution parent ,OPS_TERMINAL_INFO term
--外连接取款
left join
(
select
else sum(dayQKIn.count) end count,
else sum(dayQKIn.money) end money,
term_id_in
from
(
select
else count(transQK.tran_amt) end count,
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')
,),),'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
--外连接存款
left join
(
select
else sum(dayCKIn.count) end count,
else sum(dayCKIn.money) end money,
term_id_in
from
(
select
else count(transCK.tran_amt) end count,
else sum(transCK.tran_amt) end money,
to_char(to_date(transCK.p_req_date, 'yyyyMMdd'), 'dd') p_req_date,
term_id_in
from
BIZ_OPER_TRANS transCK
where
(transCK.P_TRANS_CODE')
and transCK.p_req_date between
to_char(add_months(last_day(sysdate) , ), 'yyyyMMdd') and
to_char(add_months(last_day(sysdate), ), 'yyyyMMdd')
group by
term_id_in,P_TRANS_CODE,to_char(to_date(transCK.p_req_date, 'yyyyMMdd'), 'dd')
) dayCKIn
group by dayCKIn.term_id_in
) dayCK
on dayCK.term_id_in=term.TERMINAL_ID
--外连接转账
left join
(
select
else sum(dayZZIn.count) end count,
else sum(dayZZIn.money) end money,
term_id_in
from
(
select
else count(transZZ.tran_amt) end count,
else sum(transZZ.tran_amt) end money,
to_char(to_date(transZZ.p_req_date, 'yyyyMMdd'), 'dd') p_req_date,
term_id_in
from
BIZ_OPER_TRANS transZZ
where
( transZZ.P_TRANS_CODE' or
transZZ.P_TRANS_CODE' )
,),),'yyyyMMdd')
group by
term_id_in,P_TRANS_CODE,to_char(to_date(transZZ.p_req_date, 'yyyyMMdd'), 'dd')
) dayZZIn
group by dayZZIn.term_id_in
) dayZZ
on dayZZ.term_id_in=term.TERMINAL_ID
--代缴费
left join
(
select
else sum(dayDJIn.count) end count,
else sum(dayDJIn.money) end money,
term_id_in
from
(
select
else count(transDJ.tran_amt) end count,
else sum(transDJ.tran_amt) end money,
to_char(to_date(transDJ.p_req_date, 'yyyyMMdd'), 'dd') p_req_date,
term_id_in
from
BIZ_OPER_TRANS transDJ
where
( transDJ.P_TRANS_CODE' or
transDJ.P_TRANS_CODE' )
,),),'yyyyMMdd')
group by
term_id_in,P_TRANS_CODE,to_char(to_date(transDJ.p_req_date, 'yyyyMMdd'), 'dd')
) dayDJIn
group by dayDJIn.term_id_in
) dayDJ
on dayDJ.term_id_in=term.TERMINAL_ID
--查询
left join
(
select
else sum(dayCXIn.count) end count,
term_id_in
from
(
select
else count(transCX.tran_amt) end count,
to_char(to_date(transCX.p_req_date, 'yyyyMMdd'), 'dd') p_req_date,
term_id_in
from
BIZ_OPER_TRANS transCX
where
( transCX.P_TRANS_CODE' or
transCX.P_TRANS_CODE' )
,),),'yyyyMMdd')
group by
term_id_in,P_TRANS_CODE,to_char(to_date(transCX.p_req_date, 'yyyyMMdd'), 'dd')
) dayCXIn
group by dayCXIn.term_id_in
) dayCX
on dayCX.term_id_in=term.TERMINAL_ID
--
and device.DEVICE_TYPE='T05'
and term.TERMINAL_ID=device.TERMINAL_ID
and term.inst_id=inst.inst_id
and inst.PARENT_INST_ID=parent.inst_id
--
-- and term.admin_name is not null
;
这个sql写的不好,太臃肿, 可以用交易码分组查询(然后用decode函数处理)
Oracle-SQL-按月统计自助终端交易量的更多相关文章
- sql按月统计数量和按月累加统计数量
1.简单的,按月统计数量 SELECT CREATE_DATE, DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month , COUNT(*) AS sum FROM p ...
- SQL 按月统计(两种方式) 分类: SQL Server 2014-08-04 15:36 154人阅读 评论(0) 收藏
(1)Convert 函数 select Convert ( VARCHAR(7),ComeDate,120) as Date ,Count(In_code) as 单数,Sum(SumTrueNum ...
- SQL SERVER 月、季、年统计与常用查询语句汇总
一.SQL SERVER 月.季.年统计查询 --本天 SELECT *FROM dbo.TableName WHERE DATEDIFF(DAY,TimeField,getdate())= 0; - ...
- 常用Oracle SQL语句(汇总版)
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...
- oracle sql语句
一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oracle a.启动ORACLE系统oracle>svrmgrlSVRM ...
- Oracle SQL 调优健康检查脚本
Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...
- 《精通Oracle SQL(第2版) 》
<精通Oracle SQL(第2版) > 基本信息 作者: (美)Karen Morton Kerry Osborne Robyn Sands Riyaj Shamsud ...
- Oracle SQL性能优化技巧大总结
http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...
- oracle sql 优化大全
转自: http://panshaobinsb.iteye.com/blog/1718233 http://yulimeander.blog.sohu.com/115850824.html 最近遇到了 ...
随机推荐
- js运算
今天把五个题目都做出来了,虽然可能用的方法比较麻烦.不过总体来说不错: <!DOCTYPE html><html> <head> <meta charset= ...
- easyUI datagrid 列宽自适应(简单 图解)(转)
响应数据格式: easyUI在html代码中结构: 发现了什么没有,我们的表头其实是一个td在td中有一个属性field那么我们就可以获得了; 以下就是自适应代码: //添加事件 function c ...
- 最长单词(一星级题目) 本来是很简单的,其实就是加个flag
随机了一个题目: 给一个词典,找出其中所有最长的单词. 这道题对于初学者还是很有用的,毕竟用的逻辑是比较复杂的 样例 在词典 { "dog", "google" ...
- hdu5673 Robot 卡特兰数 / 默慈金数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5673 分析: 这道题是一道裸的默慈金数,比较容易想到的是用卡特兰数来做.不了解的可以先学习一下. 卡特 ...
- wpf创建用户控件(计时器控件)
在vs中新增用户控件 前台xaml如下代码: <UserControl x:Class="Zh.SelfServiceEquipment.UI.ZhControls.CountDown ...
- live事件的替代方法on的使用注意事项
根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. on方法可以接受三个参数:事件名.触发选择器.事件函数. 需要特别 ...
- .net分布式压力测试工具(Beetle.DT)
肯定有人会问为什么会写这样一个开源工具?和现有的有什么差别?不过对于一个程序员来说写东西还真不需要理由的:),主要原因是工作有点闲(开玩笑),不过说实话一个程员怎可能会停止写代码呢(作为一个奔4的程序 ...
- Nginx + Memcached 实现Session共享的负载均衡
session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...
- cocos quick lua 输入框点击穿透的问题处理方案。
条件:当前版本quick-3.3 -lua,系统 win7. 问题:在输入框(textField或者editbox,下文"输入框"就代表这两种)打开的情况下弹出其他界面盖住输入框, ...
- RMI,RPC,SOAP对比分析
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp60 1.RMI 使用java的程序员,对于RMI(Remot ...