机构代销其基金产品,每家代销机构下辖多个代销网点,每个代销网点下有多个销售员,此外不同销售机构的销售网点代码可能相同,同一销售机构的销售网点不可相同。"/>
已知某家基金公司在全国拥有多家代销机构代销其基金产品,每家代销机构下辖多个代销网点,每个代销网点下有多个销售员,此外不同销售机构的销售网点代码可能相同,同一销售机构的销售网点不可相同。
注:技术交流可以加我VX:k-loop,昵称:默读者。
已知某家基金公司在全国拥有多家代销机构代销其基金产品,每家代销机构下辖多个代销网点,每个代销网点下有多个销售员,此外不同销售机构的销售网点代码可能相同,同一销售机构的销售网点不可相同。
下表为代销机构的代销网点销量统计表:
下表为销售员与代销机构、网点关系表:
因某些原因,部分销售机构网点未配置销售员,因此总部决定,以销售机构划分,将该销售机构下未配置销售员的网点销量分摊到该销售机构下有销售员的网点上,重新计算销量统计表,用于销量考核。
1.第一种分摊方式:按照销售网点销售员数量分摊,生成新的销量统计表T_SALE_STATS_NEW_1,请写出对应重新统计销量统计表的语句。 8
(例如:上图数据中,001机构的001C网点未配置销售员,该网点的销量15000,按照其他网点的人员比例分摊,001A网点一名销售员,001B网点4名销售员,则分摊后001A网点分摊销量为15000×(1/(1+4)),001B网点分摊销量为15000×(4/(1+4)),考核销量则为原实际销量+分摊销量)
2.第二种分摊方式:按照有销售员的网点销量占该销售机构总销量(不含未配置销售员网点销量)的占比分摊,生成新的销量统计表T_SALE_STATS_NEW_2,请写出对应重新统计销量统计表的语句。
(例如:上图数据中,001机构的001C网点未配置销售员,该网点的销量15000,按照其他网点的销量比例分摊,001A网点销量10000,001B网点销量20000,则分摊后001A网点分摊销量为15000×(10000/(10000+20000)),001B网点分摊销量为15000×(20000/(10000+20000)),考核销量则为原实际销量+分摊销量
3.针对上述两种分摊方式生成的任一张结果表,写出数据核对语句。
(1) 答案:
create table T_SALE_STATS_NEW_1as
select
a.agencyno, --销售机构代码
ano, --销售机构网点号
a.city, --网点所在城市
a.saleamount, --网点销量
k1salers,---销售机构网点配置的销售员数量
k2.agencysalers, --销售机构的销售员数量
nvl(k3.agencyamount,0) as agencyamount--销售机构网点未配置销售员的总销量
case when k1salers is not null --销售机构网点未配置销售员then 0 --未配置销售员的网点给0else a.saleamount+((k1salers/k2.agencysalers)*nvl(k3.agencyamount,0)) end as new_saleamount --新的网点销量,配置了销售员的网点重新分摊销量
from T_SALE_STATS a --销量统计表
left join (
--销售机构网点配置的销售员数量
select
b.agencyno, --销售机构代码
bno, --销售机构网点号
count(salerno) as netsalers --销售机构网点配置的销售员数量
from T_SALERS b --销售员网点关系表
group by
b.agencyn, --销售机构代码
bno --销售机构网点号
) k1
on a.agencyno=k1.agencyno --销售机构代码
and ano=k1no --销售机构网点号
left join (
--销售机构的销售员数量
select
b.agencyno, --销售机构代码
count(salerno) as agencysalers --销售机构的销售员数量
from T_SALERS b --销售员网点关系表
group by
b.agencyn --销售机构代码
) k2
on a.agencyno=k2.agencyno --销售机构代码
left join (
--销售机构网点未配置销售员的总销量
select
a.agencyno, --销售机构代码
sum(saleamount) as agencyamount --销售机构网点未配置销售员的总销量
from T_SALE_STATS a --销量统计表
left join T_SALERS b --销售员网点关系表
on a.agencyno=b.agencyno --销售机构代码
and ano=bno --销售机构网点号
where bno is null --销售机构网点未配置销售员
group by a.agencyno --销售机构代码) k3
on a.agencyno=k3.agencyno --销售机构代码
;(2) 答案:
create table T_SALE_STATS_NEW_2as
select
a.agencyno, --销售机构代码
ano, --销售机构网点号
a.city, --网点所在城市
a.saleamount, --网点销量
k1salers,---销售机构网点配置的销售员数量
nvl(k3.w_agencyamount,0) as w_agencyamount --销售机构网点未配置销售员的总销量
k4.y_agencyamount --销售机构网点有配置销售员的总销量
case when k1salers is not null --销售机构网点未配置销售员then 0 --未配置销售员的网点给0else a.saleamount+((a.saleamount/k4.y_agencyamount)*nvl(k3.w_agencyamount,0)) end as new_saleamount --新的网点销量,配置了销售员的网点重新分摊销量
from T_SALE_STATS a --销量统计表
left join (
--销售机构网点配置的销售员数量
select
b.agencyno, --销售机构代码
bno, --销售机构网点号
count(salerno) as netsalers --销售机构网点配置的销售员数量
from T_SALERS b --销售员网点关系表
group by
b.agencyn, --销售机构代码
bno --销售机构网点号
) k1
on a.agencyno=k1.agencyno --销售机构代码
and ano=k1no --销售机构网点号
left join (
--销售机构网点未配置销售员的总销量
select
a.agencyno, --销售机构代码
sum(saleamount) as w_agencyamount --销售机构网点未配置销售员的总销量
from T_SALE_STATS a --销量统计表
left join T_SALERS b --销售员网点关系表
on a.agencyno=b.agencyno --销售机构代码
and ano=bno --销售机构网点号
where bno is null --销售机构网点未配置销售员
group by a.agencyno --销售机构代码
) k3
on a.agencyno=k3.agencyno --销售机构代码
left join (
--销售机构网点有配置销售员的总销量
select
a.agencyno, --销售机构代码
sum(saleamount) as y_agencyamount --销售机构网点有配置销售员的总销量
from T_SALE_STATS a --销量统计表
join T_SALERS b --销售员网点关系表
on a.agencyno=b.agencyno --销售机构代码
and ano=bno --销售机构网点号
group by a.agencyno --销售机构代码
) k4
on a.agencyno=k4.agencyno --销售机构代码
;(3) 答案:
选择第(1)题的进行数据核对select
k.*
from (
select
a.agencyno, --销售机构代码
sum(a.saleamount) as agencyamount_old, --未分摊前的销售机构总销量
sum(a.new_saleamount) as agencyamount_new --分摊后的销售机构总销量
from T_SALE_STATS_NEW_1 a
group by
a.agencyno --销售机构代码
) k
where k.agencyamount_old=k.agencyamount_new --未分摊前的销售机构总销量 必须等于 分摊后的销售机构总销量
更多推荐
已知某家基金公司在全国拥有多家代销机构代销其基金产品,每家代销机构下辖多个代销网点,每个代销网点下有多个销售员,此外不同销售机构的销售网点代码可能相同,同一销售
发布评论