ORACLE统计报表

ORACLE统计报表

刚进公司没多久的小菜鸟,就让我统计一份报表,写了一个礼拜的sql也没搞出来,后来大神给了篇学习文档才搞出来的,唉,是真的难…咳咳…不煽情了…
需求:
根据分公司统计某项目的阶段进度情况

技术:

  1. GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。
  2. ROLLUP函数 和 CUBE函数使用

代码:

SELECT *
  FROM (SELECT CASE
                 WHEN GROUPING(BR.ORGID) = 1 THEN
                  '合计'
                 ELSE
                  MIN(BR.ORGNAME)
               END 分公司,
               CASE
                 WHEN GROUPING(BR.ORGID) = 1 THEN
                  999999
                 ELSE
                  MIN(BR.ORDER)
               END 排序,
               SUM(T.JDA) 阶段一完成数,
               SUM(T.JDB) 阶段二完成数,
               SUM(T.JDC) 阶段三完成数,
               SUM(T.JDD) 阶段四完成数
          FROM (SELECT F.PID,
                       O.ORGID,
                       O.ORDER,
                       DECODE(ES.A, NULL, 0, 1) JDA,
                       DECODE(ES.B, NULL, 0, 1) JDB,
                       DECODE(ES.C, NULL, 0, 1) JDC,
                       DECODE(ES.D, NULL, 0, 1) JDD
                  FROM PROJECT_TABLE F, SCHEDULE_TABLE ES, ORGTABLE O
                 WHERE F.PID = ES.PID
                   AND F.ORGID = O.ORGID
                   AND F.PID = ?) T,
               ORGTABLE BR
         WHERE BR.ORGID = T.ORGID(+)
         GROUP BY ROLLUP(BR.ORGID)) TT
 ORDER BY TT.排序;

结果集:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37980551/article/details/89387372