【数据库】存储过程的书写思路和一个例子片段

本文介绍了数据库存储过程的书写思路,通过一个实例展示了如何使用存储过程进行数据统计和处理,包括创建临时表,填充数据,更新和完善信息,最后将结果插入到实际表中,以实现对全曲话单歌手的统计分析。
1、临时表可以多个。首先从一个最原始的表中抽取能抽取的信息,对可代表关键字的信息进行group,可以包括多于最终表的信息,但是该信息必须是作为抽取中的关键信息,不可少的信息。后面的操作都基于该表
-----------------------------对全曲话单歌手作统计
SELECT  LEFT([TIMESTATMP],4)+'-'+SUBSTRING([TIMESTATMP],5,2) AS MONTH,--月份
'全曲' AS RINGTYPE,
CONTENTID,--铃音编码
CONVERT(VARCHAR(50),'未知') AS SINGER_NAME,--歌手名
CONVERT(VARCHAR(50),'未知') AS SINGER_NAME_ZM,--歌手首字母
CONVERT(VARCHAR(50),'未知') AS SINGER_TYPE,--歌手类型
CONVERT(VARCHAR(50),'未知') AS SEX,--性别
CONVERT(VARCHAR(50),'未知') AS CP_NAME,--CP商名
COUNT(CONTENTID) AS MYCOUNT,--购买话单量
SUM(CONVERT(NUMERIC(14,2),PRICE)) AS MYPRICE,--购买金额
COUNT(DISTINCT MSISDN) AS USERAMOUNT--购买用户数
INTO #T1 
FROM S_QUANGQU_TEMPMONTH
GROUP BY MONTH, RINGTYPE,CONTENTID,SINGER_NAME,SINGER_NAME_ZM,SINGER_TYPE,
SEX,CP_NAME;
 
对其中不知道的先填充,对能计算的进行计算
然后尽量完善该临时表;多个update过程
UPDATE #T1 SET SINGER_NAME=B.SINGER
FROM #T1 A,D_QUANGQU B
WHERE A.CONTENTID=B.CONTENTID;
 
生成最终临时表,并完善信息。前面的临时表信息可以更加细,比如我要某个歌手信息,前面可能很多条该歌手信息,在这里才合并信息是可以的。
--按照歌手名来分组求和
SELECT   MONTH,--月份
RINGTYPE,
SINGER_NAME,--歌手名SINGER_NAME_ZM,--歌手首字母
SINGER_TYPE,--歌手类型
SEX,--性别
CP_NAME,--CP商名
SUM(MYCOUNT) AS MYCOUNT,--购买话单量
SUM(MYPRICE) AS MYPRICE,--购买金额
SUM(USERAMOUNT) AS USERAMOUNT,--购买用户数
DATEFORMAT(GETDATE(),'YYYY-DD-MM') AS ETL_TIME--入库时间
INTO #T2 
FROM #T1
GROUP BY MONTH, RINGTYPE,SINGER_NAME,SINGER_NAME_ZM,SINGER_TYPE,
SEX,CP_NAME,ETL_TIME;
COMMIT;
 
 
插入实际表
--插入歌手统计月表
INSERT F_SINGER_AMOUNT_MONTH
SELECT * FROM #T2;
COMMIT;
 
 
清理临时表
DROP TABLE #T1;
DROP TABLE #T2;
COMMIT;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值