Oracle中的统计SQL和存储过程

  今天需要在Oracle里面做一个统计查询,关联很多表,用稍微复杂的SQL语句可以实现,如下:

select nn.GXDWMC 汉字标题1,nn.TYMC 汉字标题2,jbsl 汉字标题3,fcsl汉字标题4,GSL汉字标题5,Lsl汉字标题6 from Table0103 nn,(select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(a.TYMC) jbsl  from TABLE0901 a,Table0103 b where b.TYMC=a.SSZMC    group by  b.GXDWMC ,b.TYMC ) aa, (select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(c.TYMC) fcsl from Table0103 b ,TABLE0912 c where  b.TYMC=c.SSZMC group by b.GXDWMC,b.TYMC) bb,(select c.GXDWMC as GXDWMC,c.TYMC as TYMC,count(c.TYMC) GSL
 from Table0103 c ,TABLE0904 d where c.TYMC=d.SSZMC group by c.GXDWMC,c.TYMC) cc,(select d.GXDWMC as GXDWMC,d.TYMC as TYMC,count(d.TYMC) lSL from Table0103 d ,TABLE0906 e where d.TYMC=e.SSZMC group by  d.GXDWMC ,d.TYMC ) dd where nn.GXDWMC=aa.GXDWMC and nn.GXDWMC=bb.GXDWMC and nn.TYMC=aa.TYMC and nn.TYMC=bb.TYMC and cc.TYMC=aa.TYMC and nn.TYMC=bb.TYMC and dd.TYMC=aa.TYMC and nn.TYMC=bb.TYMC

  这个统计最终涉及的表可能有10几张,后面改用存储过程来实现也可以,如下:

CREATE OR REPLACE PACKAGE TSP_YQCY_0F_TJ0 IS
TYPE CUR IS REF CURSOR;
PROCEDURE TSP_YQCY_0F_TJ0
 (
  P_DW IN VARCHAR2,
  C    OUT CUR
 );
END TSP_YQCY_0F_TJ0;
/
CREATE OR REPLACE PACKAGE BODY TSP_YQCY_0F_TJ0 IS
 PROCEDURE TSP_YQCY_0F_TJ0
 (
  P_DW IN VARCHAR2,
  C    OUT CUR
 ) AS

begin
  OPEN C FOR

select nn.GXDWMC 汉字标题1, nn.TYMC 汉字标题2,jbsl 汉字标题3,fcsl汉字标题4 ,GSL汉字标题5,Lsl汉字标题6 from Table0103 nn,
 (select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(a.TYMC) jbsl
   from Table0901 a,Table0103 b 
    where b.TYMC=a.SSZMC        
    group by  b.GXDWMC ,b.TYMC    
    ) aa,
  (select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(c.TYMC) fcsl
     from Table0103 b ,Table0912 c 
    where  b.TYMC=c.SSZMC 
    group by  b.GXDWMC ,b.TYMC
    ) bb,
  (select c.GXDWMC as GXDWMC,c.TYMC as TYMC,count(c.TYMC) GSL
     from Table0103 c ,Table0904 d 
    where  c.TYMC=d.SSZMC 
    group by  c.GXDWMC ,c.TYMC
    ) cc,
  (select d.GXDWMC as GXDWMC,d.TYMC as TYMC,count(d.TYMC) lSL
     from Table0103 d ,Table0906 e 
    where  d.TYMC=e.SSZMC 
    group by  d.GXDWMC ,d.TYMC
    ) dd
   where nn.GXDWMC=aa.GXDWMC and nn.GXDWMC=bb.GXDWMC
          and  nn.TYMC=aa.TYMC and nn.TYMC=bb.TYMC
          and  cc.TYMC=aa.TYMC and nn.TYMC=bb.TYMC
          and  dd.TYMC=aa.TYMC and nn.TYMC=bb.TYMC   
   ;
 END;
END;
/

  对于复杂的统计,也可以通过创建临时表来完成,具体做法是:
  1、建立临时表;
  2、通过在包体完成统计,即在临时表里的统计记录的填写;
  3、返回结果集,即游标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值