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

女爷i 2022-05-15 14:17 146阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6bjEwNTQxNjIyMjk_size_16_color_FFFFFF_t_70

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

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

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

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

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

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

以下是具体的SQL语句:

  1. SELECT CU.NAME,
  2. A\_TIME,
  3. NVL(COUNT(TASK\_COUNT),0) TASK\_COUNT,
  4. NVL(COUNT(COMPLETE\_TASK\_COUNT),0) COMPLETE\_TASK\_COUNT,
  5. NVL(SUM(PASS\_COUNT\_WORK),0) PASS\_COUNT\_WORK,
  6. NVL(SUM(PASS\_COUNT\_NO\_WORK),0) PASS\_COUNT\_NO\_WORK,
  7. NVL(SUM(REJECT\_COUNT\_WORK),0) REJECT\_COUNT\_WORK,
  8. NVL(SUM(REJECT\_COUNT\_NO\_WORK),0) REJECT\_COUNT\_NO\_WORK,
  9. NVL(SUM(PASS\_COUNT\_WORK),0)+NVL(SUM(PASS\_COUNT\_NO\_WORK),0) PASS\_WORK,
  10. NVL(SUM(REJECT\_COUNT\_WORK),0)+NVL(SUM(REJECT\_COUNT\_NO\_WORK),0) REJECT\_WORK,
  11. 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,
  12. ROUND(NVL(COUNT(COMPLETE\_TASK\_COUNT),0)/NVL(COUNT(TASK\_COUNT),0),3) COMPLETE\_EFFICIENCY,
  13. 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
  14. FROM
  15. (
  16. SELECT A.A\_ORDER\_ID, A.RECEIVING\_LERK\_ID, A.A\_TIME, A.TASK\_COUNT,
  17. B.COMPLETE\_TASK\_COUNT,
  18. C.PASS\_COUNT\_WORK,
  19. D.PASS\_COUNT\_NO\_WORK,
  20. E.REJECT\_COUNT\_WORK,
  21. F.REJECT\_COUNT\_NO\_WORK
  22. FROM
  23. (//当天任务数
  24. 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
  25. from CRM\_ORDER\_AUDIT t1
  26. where t1.TASK\_START\_TIME >= to\_date(\#\{startDate\},'yyyy-MM-dd')
  27. and t1.TASK\_START\_TIME <= to\_date(\#\{endDate\},'yyyy-MM-dd')
  28. AND t1.AUDIT\_COUNT = 1
  29. GROUP BY to\_char(T1.TASK\_START\_TIME,'yyyy-MM-dd'),t1.RECEIVING\_LERK\_ID,T1.ORDER\_ID
  30. ) A
  31. LEFT JOIN
  32. (//当天及时完成数
  33. SELECT COUNT(C.ID) COMPLETE\_TASK\_COUNT,C.RECEIVING\_LERK\_ID,C.ORDER\_ID B\_ORDER\_ID
  34. from CRM\_ORDER\_AUDIT C
  35. where
  36. C.TASK\_START\_TIME >= to\_date(\#\{startDate\},'yyyy-MM-dd')
  37. and C.TASK\_START\_TIME <= to\_date(\#\{endDate\},'yyyy-MM-dd')
  38. AND (C.TASK\_START\_TIME < C.END\_TIME)
  39. 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'))
  40. AND C.AUDIT\_COUNT = 1
  41. GROUP BY C.RECEIVING\_LERK\_ID,C.ORDER\_ID
  42. ) B ON (A.RECEIVING\_LERK\_ID = B.RECEIVING\_LERK\_ID AND A.A\_ORDER\_ID = B.B\_ORDER\_ID)
  43. LEFT JOIN
  44. (//上班段通过页数
  45. SELECT SUM(A.TOTAL\_COUNT) PASS\_COUNT\_WORK, RECEIVING\_LERK\_ID, ORDER\_ID C\_ORDER\_ID
  46. FROM CRM\_ORDER\_AUDIT A
  47. WHERE A.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  48. AND A.TYPE = 1
  49. AND (to\_char(A.END\_TIME,'HH24') >= 09)
  50. AND (to\_char(A.END\_TIME,'HH24') <= 18)
  51. AND A.AUDIT\_COUNT IN (
  52. SELECT MIN(B.AUDIT\_COUNT) FROM CRM\_ORDER\_AUDIT B
  53. WHERE B.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  54. AND B.TYPE = 1
  55. AND A.ORDER\_ID = B.ORDER\_ID
  56. AND (to\_char(B.END\_TIME,'HH24') >= 09)
  57. AND (to\_char(B.END\_TIME,'HH24') <= 18)
  58. )
  59. GROUP BY RECEIVING\_LERK\_ID,ORDER\_ID
  60. ) C ON (A.RECEIVING\_LERK\_ID = C.RECEIVING\_LERK\_ID AND A.A\_ORDER\_ID = C.C\_ORDER\_ID)
  61. LEFT JOIN
  62. (//下班段通过页数
  63. SELECT SUM(A.TOTAL\_COUNT) PASS\_COUNT\_NO\_WORK, RECEIVING\_LERK\_ID, ORDER\_ID D\_ORDER\_ID
  64. FROM CRM\_ORDER\_AUDIT A
  65. WHERE A.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  66. AND A.TYPE = 1
  67. AND (to\_char(A.END\_TIME,'HH24') >= 00 AND to\_char(A.END\_TIME,'HH24') < 09)
  68. OR (to\_char(A.END\_TIME,'HH24') > 18 AND to\_char(A.END\_TIME,'HH24') < 24)
  69. AND A.AUDIT\_COUNT IN (
  70. SELECT MIN(B.AUDIT\_COUNT) FROM CRM\_ORDER\_AUDIT B
  71. WHERE B.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  72. AND B.TYPE = 1
  73. AND A.ORDER\_ID = B.ORDER\_ID
  74. AND (to\_char(B.END\_TIME,'HH24') >= 00 AND to\_char(B.END\_TIME,'HH24') < 09)
  75. OR (to\_char(B.END\_TIME,'HH24') > 18 AND to\_char(B.END\_TIME,'HH24') < 24)
  76. )
  77. GROUP BY RECEIVING\_LERK\_ID,ORDER\_ID
  78. ) D ON (A.RECEIVING\_LERK\_ID = D.RECEIVING\_LERK\_ID AND A.A\_ORDER\_ID = D.D\_ORDER\_ID)
  79. LEFT JOIN
  80. (//上班段驳回页数
  81. SELECT SUM(A.REJECT\_COUNT) REJECT\_COUNT\_WORK, RECEIVING\_LERK\_ID, ORDER\_ID E\_ORDER\_ID
  82. FROM CRM\_ORDER\_AUDIT A
  83. WHERE A.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  84. AND A.TYPE = 0
  85. AND (to\_char(A.END\_TIME,'HH24') >= 09)
  86. AND (to\_char(A.END\_TIME,'HH24') <= 18)
  87. AND A.AUDIT\_COUNT IN (
  88. SELECT B.AUDIT\_COUNT FROM CRM\_ORDER\_AUDIT B
  89. WHERE B.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  90. AND B.TYPE = 0
  91. AND A.ORDER\_ID = B.ORDER\_ID
  92. AND (to\_char(B.END\_TIME,'HH24') >= 09)
  93. AND (to\_char(B.END\_TIME,'HH24') <= 18)
  94. AND B.END\_TIME <
  95. (
  96. SELECT C.END\_TIME
  97. FROM CRM\_ORDER\_AUDIT C
  98. WHERE C.TYPE = 1 AND C.ID = (
  99. 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
  100. )
  101. )
  102. )
  103. GROUP BY RECEIVING\_LERK\_ID,ORDER\_ID
  104. ) E ON (A.RECEIVING\_LERK\_ID = E.RECEIVING\_LERK\_ID AND A.A\_ORDER\_ID = E.E\_ORDER\_ID)
  105. LEFT JOIN
  106. (//下班段驳回页数
  107. SELECT SUM(A.REJECT\_COUNT) REJECT\_COUNT\_NO\_WORK, RECEIVING\_LERK\_ID, ORDER\_ID F\_ORDER\_ID
  108. FROM CRM\_ORDER\_AUDIT A
  109. WHERE A.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  110. AND A.TYPE = 0
  111. AND (to\_char(A.END\_TIME,'HH24') >= 00 AND to\_char(A.END\_TIME,'HH24') < 09)
  112. OR (to\_char(A.END\_TIME,'HH24') > 18 AND to\_char(A.END\_TIME,'HH24') < 24)
  113. AND A.AUDIT\_COUNT IN (
  114. SELECT B.AUDIT\_COUNT FROM CRM\_ORDER\_AUDIT B
  115. WHERE B.END\_TIME BETWEEN to\_date(\#\{startDate\},'yyyy-MM-dd') AND to\_date(\#\{endDate\},'yyyy-MM-dd')
  116. AND B.TYPE = 0
  117. AND A.ORDER\_ID = B.ORDER\_ID
  118. AND (to\_char(A.END\_TIME,'HH24') >= 00 AND to\_char(A.END\_TIME,'HH24') < 09)
  119. OR (to\_char(A.END\_TIME,'HH24') > 18 AND to\_char(A.END\_TIME,'HH24') < 24)
  120. AND B.END\_TIME <
  121. (
  122. SELECT C.END\_TIME
  123. FROM CRM\_ORDER\_AUDIT C
  124. WHERE C.TYPE = 1 AND C.ID = (
  125. 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
  126. )
  127. )
  128. )
  129. GROUP BY RECEIVING\_LERK\_ID,ORDER\_ID
  130. ) F ON (A.RECEIVING\_LERK\_ID = F.RECEIVING\_LERK\_ID AND A.A\_ORDER\_ID = F.F\_ORDER\_ID)
  131. GROUP BY A.A\_ORDER\_ID, A.TASK\_COUNT, A.A\_TIME, A.RECEIVING\_LERK\_ID,
  132. B.COMPLETE\_TASK\_COUNT,
  133. C.PASS\_COUNT\_WORK,
  134. D.PASS\_COUNT\_NO\_WORK,
  135. E.REJECT\_COUNT\_WORK,
  136. F.REJECT\_COUNT\_NO\_WORK
  137. ORDER BY A.A\_TIME DESC
  138. ) combination
  139. LEFT JOIN CRM\_USER CU ON CU.ID = RECEIVING\_LERK\_ID
  140. GROUP BY A\_TIME,CU.NAME
  141. ORDER BY A\_TIME DESC

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

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读