网点发展统计报表sql(oracle)

select *
  from (select rownum tn,
               organise_id organiseId,
               organise_name,
               nvl(recommendTotal, 0) recommendTotal,
               nvl(recommendSuc, 0) recommendSuc,
               nvl(pointsTotal, 0) pointsTotal,
               decode(nvl(recommendTotal, 0),
                      0,
                      0,
                      recommendSuc / recommendTotal) sucRate,
               decode(nvl(validPoints, 0),
                      0,
                      0,
                      round(recommendSuc / validPoints, 2)) pointCapacity,
               decode(nvl(pointsTotal, 0),
                      0,
                      0,
                      round(validPoints / pointsTotal, 4) * 100) pointOnline,
               nvl(userTotal, 0) userTotal,
               nvl(vaildUser, 0) vaildUser,
               RANK() OVER(order by nvl(recommendTotal, 0) desc) as recommendTotalnum,
               RANK() OVER(order by nvl(recommendSuc, 0) desc) as recommendSucnum,
               RANK() OVER(order by decode(nvl(recommendTotal, 0), 0, 0, recommendSuc / recommendTotal) desc) as sucRatenum,
               RANK() OVER(order by decode(nvl(validPoints, 0), 0, 0, round(recommendSuc / validPoints, 2)) desc) as pointCapacitynum,
               RANK() OVER(order by decode(nvl(pointsTotal, 0), 0, 0, round(validPoints / pointsTotal, 4)) desc) as pointOnlinenum,
               nvl(onlinePoints, 0) onlinePoints,
               nvl(validPoints, 0) validPoints,
               nvl(activePoints, 0) activePoints,
               nvl(warnPoints, 0) warnPoints
          from (select o.organise_id,
                       o.organise_Code,
                       o.organise_name,
                       a.pointsTotal,
                       a.userTotal,
                       sum(recommendTotal) recommendTotal,
                       sum(recommendSuc) recommendSuc,
                       sum(onlinePoints) onlinePoints,
                       sum(vaildUser) vaildUser,
                       sum(validPoints) validPoints,
                       sum(activePoints) activePoints,
                       sum(warnPoints) warnPoints
                  from sys_organise_info o,
                       (select o.organise_id,
                               o.organise_name,
                               o.organise_code,
                               count(distinct p.organise_id) pointsTotal,
                               count(case
                                       when u.flag = 0 then
                                        u.emp_no
                                       else
                                        null
                                     end) userTotal
                          from sys_organise_info    o,
                               tview_organise_point p,
                               sys_user_info        u,
                               sys_organise_channel sc
                         where 1 = 1
                           and o.father_id = 1
                           and instr(p.organise_code, o.organise_Code) = 1
                           and p.flag = 0
                           and p.organise_id = u.organise_id(+)
                           and sc.channel_id(+) = p.channel_type
                         group by o.organise_id,
                                  o.organise_name,
                                  o.organise_code) a,
                       (select fid,
                               organise_id,
                               organise_code,
                               sum(recommendTotal) recommendTotal,
                               sum(recommendSuc) recommendSuc,
                               count(distinct case
                                       when recommendTotal > 0 then
                                        organise_id
                                       else
                                        null
                                     end) onlinePoints,
                               sum(vaildUser) vaildUser,
                               sum(case
                                     when recommendSuc > 0 then
                                      1
                                     else
                                      0
                                   end) validPoints,
                               sum(case
                                     when recommendSuc >= 50 then
                                      1
                                     else
                                      0
                                   end) activePoints,
                               sum(case
                                     when decode(recommendTotal,
                                                 0,
                                                 0,
                                                 recommendSuc / recommendTotal) <= 0.1 then
                                      1
                                     else
                                      0
                                   end) warnPoints
                          from (select fid,
                                       organise_id,
                                       organise_code,
                                       sum(alls) recommendTotal,
                                       sum(suc) recommendSuc,
                                       sum(case
                                             when suc > 0 then
                                              1
                                             else
                                              0
                                           end) vaildUser
                                  from (select r.organise_id,
                                               r.organise_code,
                                               o.organise_id fid,
                                               r.emp_no,
                                               sum(r.recommend_total) alls,
                                               sum(r.open_suc_total) suc
                                          from stat_recomend_day r,
                                               sys_organise_info o
                                         where 1 = 1
                                           and o.father_id = 1
                                           and instr(r.organise_code,
                                                     o.organise_Code) = 1
                                         group by o.organise_id,
                                                  r.organise_id,
                                                  r.organise_code,
                                                  r.emp_no)
                                 group by organise_id, organise_code, fid) t
                         group by organise_id, organise_code, fid) b
                 where 1 = 1
                   and o.father_id = 1
                   and o.organise_id = a.organise_id(+)
                   and a.organise_id = b.fid(+)
                   and o.flag = '0'
                 group by o.organise_id,
                          o.organise_name,
                          o.organise_code,
                          pointsTotal,
                          userTotal))
 order by tn

原文地址:https://www.cnblogs.com/working/p/2918980.html