人效报表,获取同一人每天的处理数据的情况,同时分时段显示

当天任务数:按订单的审核记录表的中任务开始时间统计。当天相同订单多次提交,只计第一次提交;

当天及时完成数=当天任务数中的订单,任务开始时间+24小时>=该订单审核的结束时间 的订单数量;

上班段通过页数:当天订单通过时间在上班时间段内(9:00-18:00)的所有订单的页数总和(一个订单多次通过的,仅计一次通过),下班时间段同理;

上班段驳回页数:当天订单驳回时间在上班时间段内(9:00-18:00)的所有订单的页数总和(驳回时间>第一次通过时间的,不计),下班时间段同理。

这次报表的思路在于:在同一张表“审核表”中取数据时候,先取时间段的数据出来,然后将这六条要求写成相对应的查询语句,再用LEFT JOIN(使用右外连接应该也可以,本人没有试过)连接起来取每一天的数据,最后把整个连接表当做一个新表进行查询。这样子查询出来的数据就是一张列表,在mybatis中使用map类型返回值,在控制器中用list封装,即可读取出数据。

(还有第二种思路:先取出每一天的数据,再取一个时间段的数据,即先部分后整体。但是这样子要使用oracle循环,写存储过程,比较繁琐,有兴趣的朋友可以尝试一下)

以下是具体的SQL语句:

        SELECT CU.NAME,
             A_TIME, 
             NVL(COUNT(TASK_COUNT),0) TASK_COUNT, 
              NVL(COUNT(COMPLETE_TASK_COUNT),0) COMPLETE_TASK_COUNT, 
             NVL(SUM(PASS_COUNT_WORK),0) PASS_COUNT_WORK, 
             NVL(SUM(PASS_COUNT_NO_WORK),0) PASS_COUNT_NO_WORK, 
             NVL(SUM(REJECT_COUNT_WORK),0) REJECT_COUNT_WORK, 
             NVL(SUM(REJECT_COUNT_NO_WORK),0) REJECT_COUNT_NO_WORK,

             NVL(SUM(PASS_COUNT_WORK),0)+NVL(SUM(PASS_COUNT_NO_WORK),0) PASS_WORK,
             NVL(SUM(REJECT_COUNT_WORK),0)+NVL(SUM(REJECT_COUNT_NO_WORK),0) REJECT_WORK,
             NVL(SUM(PASS_COUNT_WORK),0)+NVL(SUM(PASS_COUNT_NO_WORK),0)+NVL(SUM(REJECT_COUNT_WORK),0)+NVL(SUM(REJECT_COUNT_NO_WORK),0) ALL_COUNT,

             ROUND(NVL(COUNT(COMPLETE_TASK_COUNT),0)/NVL(COUNT(TASK_COUNT),0),3) COMPLETE_EFFICIENCY,
             ROUND((NVL(SUM(PASS_COUNT_WORK),0)+NVL(SUM(PASS_COUNT_NO_WORK),0))/(NVL(SUM(PASS_COUNT_WORK),0)+NVL(SUM(PASS_COUNT_NO_WORK),0)+NVL(SUM(REJECT_COUNT_WORK),0)+NVL(SUM(REJECT_COUNT_NO_WORK),0)),3) PASS_EFFICIENCY
        FROM
        (
        SELECT A.A_ORDER_ID, A.RECEIVING_LERK_ID, A.A_TIME, A.TASK_COUNT, 
                     B.COMPLETE_TASK_COUNT,
                     C.PASS_COUNT_WORK,
                     D.PASS_COUNT_NO_WORK,
                     E.REJECT_COUNT_WORK,
                     F.REJECT_COUNT_NO_WORK
        FROM
        (//当天任务数
            select count(0) TASK_COUNT,to_char(TASK_START_TIME,'yyyy-MM-dd') A_TIME,t1.RECEIVING_LERK_ID ,T1.ORDER_ID A_ORDER_ID
            from CRM_ORDER_AUDIT t1 
            where t1.TASK_START_TIME >= to_date(#{startDate},'yyyy-MM-dd') 
            and t1.TASK_START_TIME <=  to_date(#{endDate},'yyyy-MM-dd') 
            AND t1.AUDIT_COUNT = 1
            GROUP BY to_char(T1.TASK_START_TIME,'yyyy-MM-dd'),t1.RECEIVING_LERK_ID,T1.ORDER_ID
        ) A
        LEFT JOIN
        (//当天及时完成数
            SELECT COUNT(C.ID) COMPLETE_TASK_COUNT,C.RECEIVING_LERK_ID,C.ORDER_ID B_ORDER_ID
            from CRM_ORDER_AUDIT C
            where 
            C.TASK_START_TIME >= to_date(#{startDate},'yyyy-MM-dd') 
            and C.TASK_START_TIME <=  to_date(#{endDate},'yyyy-MM-dd') 
            AND (C.TASK_START_TIME < C.END_TIME)
            AND ((to_char(C.END_TIME,'yyyy-mm-dd HH24:MI:SS')) < to_char(C.TASK_START_TIME+1,'yyyy-mm-dd HH24:MI:SS'))
            AND C.AUDIT_COUNT = 1
            GROUP BY C.RECEIVING_LERK_ID,C.ORDER_ID
        ) B ON (A.RECEIVING_LERK_ID = B.RECEIVING_LERK_ID AND A.A_ORDER_ID = B.B_ORDER_ID)
        LEFT JOIN
        (//上班段通过页数
            SELECT SUM(A.TOTAL_COUNT) PASS_COUNT_WORK, RECEIVING_LERK_ID, ORDER_ID C_ORDER_ID
            FROM CRM_ORDER_AUDIT A 
            WHERE A.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
            AND A.TYPE = 1
            AND (to_char(A.END_TIME,'HH24') >= 09)
            AND (to_char(A.END_TIME,'HH24') <= 18)
            AND A.AUDIT_COUNT IN (
                SELECT MIN(B.AUDIT_COUNT) FROM CRM_ORDER_AUDIT B 
                WHERE B.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
                AND B.TYPE = 1
                AND A.ORDER_ID = B.ORDER_ID
                AND (to_char(B.END_TIME,'HH24') >= 09)
                AND (to_char(B.END_TIME,'HH24') <= 18)
            )
            GROUP BY RECEIVING_LERK_ID,ORDER_ID
        ) C ON (A.RECEIVING_LERK_ID = C.RECEIVING_LERK_ID AND A.A_ORDER_ID = C.C_ORDER_ID)
        LEFT JOIN
        (//下班段通过页数
            SELECT SUM(A.TOTAL_COUNT) PASS_COUNT_NO_WORK, RECEIVING_LERK_ID, ORDER_ID D_ORDER_ID
            FROM CRM_ORDER_AUDIT A 
            WHERE A.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
            AND A.TYPE = 1
            AND (to_char(A.END_TIME,'HH24') >= 00 AND to_char(A.END_TIME,'HH24') < 09)
            OR (to_char(A.END_TIME,'HH24') > 18 AND to_char(A.END_TIME,'HH24') < 24)
            AND A.AUDIT_COUNT IN (
                SELECT MIN(B.AUDIT_COUNT) FROM CRM_ORDER_AUDIT B 
                WHERE B.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
                AND B.TYPE = 1
                AND A.ORDER_ID = B.ORDER_ID
                AND (to_char(B.END_TIME,'HH24') >= 00 AND to_char(B.END_TIME,'HH24') < 09)
                OR (to_char(B.END_TIME,'HH24') > 18 AND to_char(B.END_TIME,'HH24') < 24)
            )
            GROUP BY RECEIVING_LERK_ID,ORDER_ID
        ) D ON (A.RECEIVING_LERK_ID = D.RECEIVING_LERK_ID AND A.A_ORDER_ID = D.D_ORDER_ID)
        LEFT JOIN
        (//上班段驳回页数
            SELECT SUM(A.REJECT_COUNT) REJECT_COUNT_WORK, RECEIVING_LERK_ID, ORDER_ID E_ORDER_ID
            FROM CRM_ORDER_AUDIT A 
            WHERE A.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
            AND A.TYPE = 0
            AND (to_char(A.END_TIME,'HH24') >= 09)
            AND (to_char(A.END_TIME,'HH24') <= 18)
            AND A.AUDIT_COUNT IN (
                SELECT B.AUDIT_COUNT FROM CRM_ORDER_AUDIT B 
                WHERE B.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
                AND B.TYPE = 0
                AND A.ORDER_ID = B.ORDER_ID
                AND (to_char(B.END_TIME,'HH24') >= 09)
                AND (to_char(B.END_TIME,'HH24') <= 18)
                AND B.END_TIME < 
                (
                    SELECT C.END_TIME
                    FROM CRM_ORDER_AUDIT C
                    WHERE C.TYPE = 1 AND C.ID = (
                        SELECT MIN(D.ID) FROM CRM_ORDER_AUDIT D WHERE D.TYPE = 1 AND D.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd') AND B.ORDER_ID = D.ORDER_ID
                    )
                )
            )
            GROUP BY RECEIVING_LERK_ID,ORDER_ID
        ) E ON (A.RECEIVING_LERK_ID = E.RECEIVING_LERK_ID AND A.A_ORDER_ID = E.E_ORDER_ID)
        LEFT JOIN
        (//下班段驳回页数
            SELECT SUM(A.REJECT_COUNT) REJECT_COUNT_NO_WORK, RECEIVING_LERK_ID, ORDER_ID F_ORDER_ID
            FROM CRM_ORDER_AUDIT A 
            WHERE A.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
            AND A.TYPE = 0
            AND (to_char(A.END_TIME,'HH24') >= 00 AND to_char(A.END_TIME,'HH24') < 09)
            OR (to_char(A.END_TIME,'HH24') > 18 AND to_char(A.END_TIME,'HH24') < 24)
            AND A.AUDIT_COUNT IN (
                SELECT B.AUDIT_COUNT FROM CRM_ORDER_AUDIT B 
                WHERE B.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd')
                AND B.TYPE = 0
                AND A.ORDER_ID = B.ORDER_ID
                AND (to_char(A.END_TIME,'HH24') >= 00 AND to_char(A.END_TIME,'HH24') < 09)
                OR (to_char(A.END_TIME,'HH24') > 18 AND to_char(A.END_TIME,'HH24') < 24)
                AND B.END_TIME < 
                (
                    SELECT C.END_TIME
                    FROM CRM_ORDER_AUDIT C
                    WHERE C.TYPE = 1 AND C.ID = (
                        SELECT MIN(D.ID) FROM CRM_ORDER_AUDIT D WHERE D.TYPE = 1 AND D.END_TIME BETWEEN to_date(#{startDate},'yyyy-MM-dd') AND to_date(#{endDate},'yyyy-MM-dd') AND B.ORDER_ID = D.ORDER_ID
                    )
                )
            )
            GROUP BY RECEIVING_LERK_ID,ORDER_ID
        ) F ON (A.RECEIVING_LERK_ID = F.RECEIVING_LERK_ID AND A.A_ORDER_ID = F.F_ORDER_ID)
        
        GROUP BY A.A_ORDER_ID, A.TASK_COUNT, A.A_TIME, A.RECEIVING_LERK_ID,
                         B.COMPLETE_TASK_COUNT,
                         C.PASS_COUNT_WORK,
                         D.PASS_COUNT_NO_WORK,
                         E.REJECT_COUNT_WORK,
                         F.REJECT_COUNT_NO_WORK
        ORDER BY A.A_TIME DESC
        ) combination 
        LEFT JOIN CRM_USER CU ON CU.ID = RECEIVING_LERK_ID
       
        GROUP BY A_TIME,CU.NAME
        ORDER BY A_TIME DESC

注:一下子看不懂的亲们,可以先将六条select查询拿出来看,是可以单独运行的。本人仅提供思路,因此不会提供“审核表”的具体参数说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值