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-按月统计自助终端交易量的更多相关文章

  1. sql按月统计数量和按月累加统计数量

    1.简单的,按月统计数量 SELECT CREATE_DATE, DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month , COUNT(*) AS sum FROM p ...

  2. 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 ...

  3. SQL SERVER 月、季、年统计与常用查询语句汇总

    一.SQL SERVER 月.季.年统计查询 --本天 SELECT *FROM dbo.TableName WHERE DATEDIFF(DAY,TimeField,getdate())= 0; - ...

  4. 常用Oracle SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  5. oracle sql语句

    一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oracle a.启动ORACLE系统oracle>svrmgrlSVRM ...

  6. Oracle SQL 调优健康检查脚本

    Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...

  7. 《精通Oracle SQL(第2版) 》

    <精通Oracle SQL(第2版) > 基本信息 作者: (美)Karen Morton    Kerry Osborne    Robyn Sands    Riyaj Shamsud ...

  8. Oracle SQL性能优化技巧大总结

    http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...

  9. oracle sql 优化大全

    转自: http://panshaobinsb.iteye.com/blog/1718233 http://yulimeander.blog.sohu.com/115850824.html 最近遇到了 ...

随机推荐

  1. Spring(三)之自动装配、表达式

    自动装配 自动装配(autowire)协作者 Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自动让Spring通过检查BeanFact ...

  2. 获取token之后,再调用匿名方法

    js获取token bpm.api.beginDownload = function (filePath, fileName) { var url = "/Home/GetToken&quo ...

  3. 【Linux】文件存储结构

    大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号.  Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...

  4. python+selenium自动化软件测试(第12章):Python读写XML文档

    XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> ...

  5. 求链表内环的入口节点-Java

    步骤: 1.设置快慢两个指针,slow和fast,每次slow走一步slow.next,而fast走两步fast.next.next. 2.如果链表有环肯定可以在环内的一个节点相遇. 3.此时,slo ...

  6. Rxjava2视频笔记

    观察者模式 观察者模式是一对多的模式,多个观察者同时监听一个主题,当主题更新时,会同时通知所有的观察者 subject –>observer 学习新技术的步骤 1.官方文档的查阅和学习 2.Go ...

  7. live事件的替代方法on的使用注意事项

    根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. on方法可以接受三个参数:事件名.触发选择器.事件函数. 需要特别 ...

  8. Java基础精选,你答对了几道?

    没有技术深度是大多程序员的一种常态. 但是当你成为一个资深的工程师的时候,很多公司并不希望你还是那样平庸,没有深度.虽然你会纳闷,我就算有深度你们也不一定用得上呀?然而到了这个级别的人需求量并不像初中 ...

  9. chrome开发工具指南(六)

    检查和编辑页面与样式 使用 Chrome DevTools 的 Elements 面板检查和实时编辑页面的 HTML 与 CSS. 在 Elements 面板中检查和实时编辑 DOM 树中的任何元素. ...

  10. Tomcat session生成算法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt396 修改TOMCAT 默认的生成SESSION ID的算法和字符长度非常简 ...