有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,还望不啬赐教啊,谢谢!
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,还望不啬赐教啊,谢谢!
------->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