有10个sp,对应有10个sp企业代码,每个sp分别有若干子业务,称为SP业务代码,现在有一张总的汇总表,包含普通用户和sp的关系表,注意一个用户如果订购了
A sp的几个业务,则表中有几条记录,下面是我就具体的需求写的sql(嵌在perl里面的,不是标准sql,但相信大家都懂的起啊):
                        select a.SP_org_cd, #SP企业代码                
a.SP_busn_cd,#SP业务代码
sum(a.mms_qty) as mms_qtys,#业务量汇总
sum(a.info_fee) as info_fees,#信息费汇总
sum(distinct a.MSISDN) as user_nums #用户数汇总
from $tb_dm_mms_mon a
where a.CMCC_prov_prvd_id=$PCODE
    and   a.SP_org_cd in ($stringvalue)
and   a.SP_busn_typ_cd=2
group by a.SP_org_cd,a.SP_busn_cd下面就这段sql,再细说一下这个需求:
$tb_dm_mms_mon就是上面说的那个汇总源表;
$stringvalue是一个字符串,里面包含了10个SP企业代码;
$PCODE是地市代码,不用考虑它从上面的sql可以看出,最终是需要将这10个sp下面的各个业务的业务量,信息费,用户数进行汇总.
而且这10个sp是几万个sp中业务量总数(这个业务量总数是按SP_org_cd 来group by的)排名前10位的,所以要求最终查询的结果也是按照SP的排名来展示的.假设SP1是排名第一,SP2是排名第2,以此类推,查询出的结果应该是下面这样子:
*****************************************
sp1  业务代码1    业务量  信息费   用户数
sp1  业务代码2    业务量  信息费   用户数
.        .
.        .
****************************************
sp2  业务代码1   业务量  信息费   用户数 
sp2  业务代码2   业务量  信息费   用户数
.        .
.        .
****************************************
sp3  业务代码1    业务量  信息费   用户数
sp3  业务代码2    业务量  信息费   用户数
.        .
.        .
*****************************************
....
....
只有这一张表,不管用什么方法,内外连接什么的,只要能达到目的就可以了.
我最终会将查询出来的数据,一条一条的fetch出来,放到数组里面去,而且数组的每条记录里面会编排一个数字,从0开始加1,
最后我将根据这个数字从小到大的用报表把上面的信息展示出来.其实也可以用循环,对10个sp逐个逐个的处理,但这样搞,数据库实在受不了,所以想搞一个直接一点的方法.不知道有没有兄弟以前写过功能类似的sql,还望不啬赐教啊,谢谢!

解决方案 »

  1.   

    and   a.SP_org_cd in ($stringvalue)中的$stringvalue改成
    ------->select a1.SP_org_cd ,
           sum(a1.mms_qty) as mms_qtys  ---业务量汇总
    from $tb_dm_mms_mon  a1
    where ROWNUM<=10
    group by a1.SP_org_cd 
    order by 2 desc
      

  2.   

    to licsth():很遗憾,虽然我将帖子发在ORACLE版,但实际的环境确实一个NCR的专业数据库,而且他竟然不认rownum这个属性,不然我早就下手了,呵呵,不过还是谢谢你.
      

  3.   

    NCR的专业数据库啊  up
      

  4.   

    再悄悄问一下,order by 能在子查询中出现吗?
      

  5.   

    to real_name(*真名) :NCR的专业的专业数据库怎么了,我觉得很垃圾,标准化的sql在这里经常行不通,Faint!
      

  6.   

    我自己都晕了,order by 在oracle9i当然能出现在子查询里面 ,可是碰到NCR,真是就没的这样的好事