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;
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;
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;
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;
INSERT F_SINGER_AMOUNT_MONTH
SELECT * FROM #T2;
COMMIT;
清理临时表
DROP TABLE #T1;
DROP TABLE #T2;
COMMIT;
DROP TABLE #T2;
COMMIT;