sql 电信分析
来源:互联网 发布:淘宝7折代购怎么搞 编辑:程序博客网 时间:2024/05/21 22:13
CREATE OR REPLACE PROCEDURE P_SD_FCT_CDMA_TERM_MODEL(
IN @LOAD_DATE VARCHAR(8) DEFAULT CONVERT(VARCHAR(8), DATEFORMAT(DATEADD(MM,-1,NOW()), 'YYYYMMDD'))
)
/*******************************************************************
-- PURPOSE : 换机模型汇总过程
-- AUTHER : 唐**
-- FREQUENCY : 按要求生成每月历史数据
-- DATE : 2016-01-05
---------------------------------------------------------------
-- 输入参数 :LOAD_DATE 表的生产日期,默认取系统时间
-- 结果表 : FCT_CDMA_TERM_MODEL(分区表按月份分区)
---------------------------------------------------------------
-- MODIFIED HISTORY
-- DATE AUTHOR VERSION DESCRIPTION
-- 2016-01-05 唐** V1.0 创建过程
*******************************************************************/
BEGIN
--日志需求变量
DECLARE @OBJECT_NAME VARCHAR(30) DEFAULT 'P_SD_FCT_CDMA_TERM_MODEL';
DECLARE @STEP_LOGS VARCHAR(200);
DECLARE @START_TIME TIMESTAMP;
DECLARE @ROW_CNT NUMERIC(13);
--过程变量
DECLARE @MONTH_ID INT; --统计月份
DECLARE @MONTH_LAST_DAY VARCHAR(10); --统计月最后一天
DECLARE @NEXT_MONTH_FIRST_DAY VARCHAR(10); --统计月下月第一天
DECLARE @PRE_MONTH_ID INT; --统计上月
DECLARE @PRE1_MONTH_ID INT; --统计上上月
DECLARE @PRE2_MONTH_ID INT; --统计上上上月
DECLARE @NEXT_MONTH_ID INT; --统计下月
DECLARE @SCRIPT VARCHAR(3000);
--变量初始化
SET @MONTH_ID = CONVERT(INT,DATEFORMAT(@LOAD_DATE,'YYYYMM'));
SET @MONTH_LAST_DAY = DATEFORMAT(DATEADD(DD,-1,DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYYMM')||'01'),'YYYY-MM-DD');
SET @NEXT_MONTH_FIRST_DAY = DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYY-MM')||'-01';
SET @PRE_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-1,@LOAD_DATE),'YYYYMM'));
SET @PRE1_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-2,@LOAD_DATE),'YYYYMM'));
SET @PRE2_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-3,@LOAD_DATE),'YYYYMM'));
SET @NEXT_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYYMM'));
-------------------------------------------------------------------------------------------------------------------------
SET @STEP_LOGS = 'STEP 1:取全网用户及其基础特征信息';
SET @START_TIME = NOW();
--删除临时表
DROP TABLE IF EXISTS SD_TEMP_CDMA_BASIC_INFO; COMMIT;
--插入全网用户及其基础特征信息到临时表
SELECT MONTH_ID
,SERV_ID
,SERV_NBR
,ACC_NBR
,CUST_NAME
--,CASE WHEN LENGTH(CUST_NAME) > 4 THEN '公司客户' ELSE '私人客户' END AS CUST_NAME_TYPE
,CUST_ID
,SERV_GRP_TYPE
,PROD_ID
--,CASE WHEN PROD_ID = 3204 THEN '预付费' WHEN PROD_ID = 3205 THEN '后付费' ELSE '其它' END AS PAY_TYPE
--,CASE WHEN FINISH_DATE IS NULL THEN CREATE_DATE ELSE FINISH_DATE END AS INNET_DT
,CREATE_DATE
,FINISH_DATE
,ONLINE_TIME AS YH_ONLINE_TIME
,IS_ZFK
,IS_CZ
,STATE
,WIRELESS_TYPE
INTO SD_TEMP_CDMA_BASIC_INFO
FROM RPT_COMM_CM_SERV_CDMA_2010
WHERE MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2:增加是否VPN用户/是否VIP用户/客户类型/付费类型/入网时间信息';
SET @START_TIME = NOW();
--增加是否VPN用户/是否VIP用户/客户类型/付费类型/入网时间信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
IS_VPN INT NULL
,IS_VIP INT NULL
,CUST_NAME_TYPE VARCHAR(30) NULL
,PAY_TYPE VARCHAR(30) NULL
,INNET_DT DATE NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.1:更新客户类型/付费类型/入网时间信息';
SET @START_TIME = NOW();
--更新客户类型/付费类型/入网时间信息
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET CUST_NAME_TYPE = CASE WHEN LENGTH(CUST_NAME) > 4 THEN '公司客户' ELSE '私人客户' END
,PAY_TYPE = CASE WHEN PROD_ID = 3204 THEN '预付费' WHEN PROD_ID = 3205 THEN '后付费' ELSE '其它' END
,INNET_DT = CASE WHEN FINISH_DATE IS NULL THEN CREATE_DATE ELSE FINISH_DATE END;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.2:更新是否VPN用户';
SET @START_TIME = NOW();
--更新是否VPN用户
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_VPN = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET IS_VPN = 1
FROM VPN_ZB_LIST AS B
WHERE A.ACC_NBR = B.ACC_NBR;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.3:更新是否VIP用户';
SET @START_TIME = NOW();
--更新是否VIP用户
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_VIP = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET IS_VIP = 1
FROM REPORT.RPT_KF_CDMA_ZGDPZ_QD AS B, --张云娇维护
RPT_COMM_CM_SERV_CDMA_2010 AS C
WHERE B.YEAR = 2016
AND A.SERV_ID = C.SERV_ID
AND C.CUST_NBR = B.CQ_CUST_NBR
AND C.MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3:增加付费账户类型(对公、对私、其它)、缴费方式';
SET @START_TIME = NOW();
--增加付费账户类型(对公、对私、其它)、缴费方式
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
ACCT_ID NUMERIC(10) NULL
,PAYMENT_METHOD VARCHAR(6) NULL
,BANK_ACCT_TYPE VARCHAR(6) NULL
,PAY_ACC_TYPE VARCHAR(40) NULL
,PAY_MET_TYPE VARCHAR(40) NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.1:初始化付费账户类型';
SET @START_TIME = NOW();
--初始化付费账户类型
UPDATE SD_TEMP_CDMA_BASIC_INFO SET PAY_ACC_TYPE = '其它',PAY_MET_TYPE = '其它';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.2:获取帐户标识';
SET @START_TIME = NOW();
--获取帐户标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.ACCT_ID = B.ACCT_ID
FROM ZWFXDEV.TB_CM_SERVACCT AS B
WHERE A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.3:获取付费帐户标识、缴费标识';
SET @START_TIME = NOW();
--获取付费帐户标识、缴费标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PAYMENT_METHOD = B.PAYMENT_METHOD
,A.BANK_ACCT_TYPE = B.BANK_ACCT_TYPE
FROM ZWFXDEV.TB_CM_BANKACCT AS B
WHERE A.ACCT_ID = B.ACCT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.4:更新付费账户类型';
SET @START_TIME = NOW();
--更新付费账户类型
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET PAY_ACC_TYPE = B.DICT_NAME
FROM ZWFXDEV.TB_PC_DICT AS B
WHERE B.DICT_TYPEID = 'CM_ACCTTYPE'
AND A.BANK_ACCT_TYPE = B.DICT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.5:更新缴费方式';
SET @START_TIME = NOW();
--更新缴费方式
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET PAY_MET_TYPE = B.DICT_NAME
FROM ZWFXDEV.TB_PC_DICT AS B
WHERE B.DICT_TYPEID = 'CM_PAYM'
AND A.PAYMENT_METHOD = B.DICT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4:增加用户行为信息';
SET @START_TIME = NOW();
--增加用户行为信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
STM_DATA_01 NUMERIC(12,2) NULL,
MOU_CALLER_01 NUMERIC(12,2) NULL,
MOU_CALL_01 NUMERIC(12,2) NULL,
FEE_01 NUMERIC(12,2) NULL,
FEE_NEW_01 NUMERIC(12,2) NULL,
MGS_COUNTS_01 NUMERIC(12) NULL,
STM_DATA_02 NUMERIC(12,2) NULL,
MOU_CALLER_02 NUMERIC(12,2) NULL,
MOU_CALL_02 NUMERIC(12,2) NULL,
FEE_02 NUMERIC(12,2) NULL,
FEE_NEW_02 NUMERIC(12,2) NULL,
MGS_COUNTS_02 NUMERIC(12) NULL,
STM_DATA_03 NUMERIC(12,2) NULL,
MOU_CALLER_03 NUMERIC(12,2) NULL,
MOU_CALL_03 NUMERIC(12,2) NULL,
FEE_03 NUMERIC(12,2) NULL,
FEE_NEW_03 NUMERIC(12,2) NULL,
MGS_COUNTS_03 NUMERIC(12) NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.1:更新上月行为信息';
SET @START_TIME = NOW();
--更新上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_01 = B.STM_DATA,
A.MOU_CALLER_01 = B.MOU_CALL,
A.MOU_CALL_01 = B.MOU,
A.FEE_01 = B.FEE,
A.FEE_NEW_01 = B.FEE_NEW,
A.MGS_COUNTS_01 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.2:更新上上月行为信息';
SET @START_TIME = NOW();
--更新上上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_02 = B.STM_DATA,
A.MOU_CALLER_02 = B.MOU_CALL,
A.MOU_CALL_02 = B.MOU,
A.FEE_02 = B.FEE,
A.FEE_NEW_02 = B.FEE_NEW,
A.MGS_COUNTS_02 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE1_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.3:更新上上上月行为信息';
SET @START_TIME = NOW();
--更新上上上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_03 = B.STM_DATA,
A.MOU_CALLER_03 = B.MOU_CALL,
A.MOU_CALL_03 = B.MOU,
A.FEE_03 = B.FEE,
A.FEE_NEW_03 = B.FEE_NEW,
A.MGS_COUNTS_03 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE2_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 5:增加是否活跃用户';
SET @START_TIME = NOW();
--增加是否活跃用户
--前三个月的流量+通话+短信大于30为合约用户
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD IS_HIGH_USE INT NULL;
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_HIGH_USE = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_01 + STM_DATA_01 + MGS_COUNTS_01) > 30;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_02 + STM_DATA_02 + MGS_COUNTS_02) > 30;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_03 + STM_DATA_03 + MGS_COUNTS_03) > 30;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 6:增加主套餐信息';
SET @START_TIME = NOW();
--增加主套餐信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD (MAIN_DISC_ID NUMERIC(10) NULL,MAIN_PRICE_ID NUMERIC(10) NULL,MAIN_DISC_NAME VARCHAR(100));
--更新主套餐信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.MAIN_DISC_ID = B.DISC_ID,
A.MAIN_PRICE_ID = B.PRICE_ID,
A.MAIN_DISC_NAME = C.DISC_NAME
FROM RPT_COMM_CM_MSDISC_2010 AS B,DIM_MAIN_DISC AS C
WHERE B.PROD_ID IN (3204,3205)
AND B.MONTH_ID = @MONTH_ID
AND A.SERV_ID = B.SERV_ID
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND B.LIMIT_DATE >= @MONTH_LAST_DAY;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7:处理补贴信息需要创建多个临时表';
SET @START_TIME = NOW();
--处理补贴信息需要创建多个临时表
--临时表1(SD_TEMP_SERV_CDMA_BT):存放补贴基础信息
--临时表2(SD_TEMP_SERV_CDMA_BT_MLEVEL):获取最小LEVEL,以得到DATA_SOUCE_ID
--临时表3(SD_TEMP_SERV_CDMA_BT_ETL):处理补贴信息:当有多个补贴时,取最近一个补贴
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.1:获取补贴基础信息';
SET @START_TIME = NOW();
--删除临时表1
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT;
--获取补贴基础信息
SELECT A.SERV_ID,
B.DISC_ID,
B.PRICE_ID,
C.DATA_SOUCE_DL,
B.CREATE_DATE,
B.LIMIT_DATE,
B.MSINFO_ID,
C.DISC_LEVEL,
C.DISC_NAME,
C.PRICE_NAME,
C.DATA_SOUCE_ID,
C.DATA_SOUCE_NAME
INTO SD_TEMP_SERV_CDMA_BT
FROM SD_TEMP_CDMA_BASIC_INFO AS A,RPT_COMM_CM_MSDISC_2010 AS B,REPORT.RPT_DAILY_CDMA_TERMINAL_DISC_V2 AS C
WHERE B.MONTH_ID = @MONTH_ID
AND A.SERV_ID = B.SERV_ID
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND C.DATA_SOUCE_DL IN ('终端补贴','话费补贴');
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.2:获取最小LEVEL,以得到DATA_SOUCE_ID';
SET @START_TIME = NOW();
--删除临时表2
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT_MLEVEL;
--获取最小LEVEL,以得到DATA_SOUCE_ID
SELECT SERV_ID,
MIN(DISC_LEVEL) AS DISC_LEVEL
INTO SD_TEMP_SERV_CDMA_BT_MLEVEL
FROM SD_TEMP_SERV_CDMA_BT
GROUP BY SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.3:获取补贴金额';
SET @START_TIME = NOW();
--获取补贴金额
ALTER TABLE SD_TEMP_SERV_CDMA_BT ADD AMOUNT NUMERIC(12,2) NULL;
/* UPDATE SD_TEMP_SERV_CDMA_BT AS A
SET A.AMOUNT=B.AMOUNT
FROM REPORT.RPT_MONTHLY_CDMA_TERMINAL_ALLOWANCE_LIST_2010 AS B
WHERE A.SERV_ID=B.SERV_ID
AND A.DISC_ID=B.DISC_ID
AND B.MONTH_ID = @MONTH_ID
AND B.AMOUNT > 0;
COMMIT; */
--更新口径:20160106林春芳
UPDATE SD_TEMP_SERV_CDMA_BT AS A
SET A.AMOUNT=B.AMOUNT/100
FROM zwfxdev.tb_ms_stamps_exchange_union AS B --表名需要小写
WHERE A.SERV_ID=B.SERV_ID
AND A.DISC_ID=B.DISC_ID
AND B.MONTH_ID = @MONTH_ID
AND B.AMOUNT > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.4:处理补贴信息:当有多个补贴时,取最近一个补贴';
SET @START_TIME = NOW();
--删除临时表3
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT_ETL;
--处理补贴信息:当有多个补贴时,取最近一个补贴
SELECT *,
CASE WHEN DATEDIFF(MM,@NEXT_MONTH_FIRST_DAY,LIMIT_DATE) <= 0 THEN NULL ELSE DATEDIFF(MM,@NEXT_MONTH_FIRST_DAY,LIMIT_DATE) END BT_LEFT_M,
ROW_NUMBER() OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL ORDER BY LIMIT_DATE DESC) RN,
COUNT(DISC_ID) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) SUM_CNT,
COUNT(CASE WHEN LIMIT_DATE > @NEXT_MONTH_FIRST_DAY THEN DISC_ID ELSE NULL END) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) VAILD_CNT,
COUNT(CASE WHEN LIMIT_DATE <= @NEXT_MONTH_FIRST_DAY THEN DISC_ID ELSE NULL END) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) INVAILD_CNT
INTO SD_TEMP_SERV_CDMA_BT_ETL
FROM SD_TEMP_SERV_CDMA_BT;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8:增加补贴相关信息';
SET @START_TIME = NOW();
--增加补贴相关信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
HF_BT_LIMIT_DATE DATE NULL, --话费补贴到期时间
ZD_BT_LIMIT_DATE DATE NULL, --终端补贴到期时间
HF_BT_LEFT_M NUMERIC(10) NULL, --话费补贴到期时长
ZD_BT_LEFT_M NUMERIC(10) NULL, --终端补贴到期时长
ZD_BT_FEE NUMERIC(10,2) NULL, --终端补贴金额
HF_BT_FEE NUMERIC(10,2) NULL, --话费补贴金额
ZD_SUM_CNT NUMERIC(10) NULL, --终端补贴总次数
ZD_VAILD_CNT NUMERIC(10) NULL, --终端补贴有效次数
ZD_INVAILD_CNT NUMERIC(10) NULL, --终端补贴无效次数
HF_SUM_CNT NUMERIC(10) NULL, --话费补贴总次数
HF_VAILD_CNT NUMERIC(10) NULL, --话费补贴有效次数
HF_INVAILD_CNT NUMERIC(10) NULL, --话费补贴无效次数
IS_ZD_BT_ONCE INT NULL, --曾经是否存在终端补贴
IS_ZD_BT INT NULL, --当前是否存在终端补贴
IS_HF_BT_ONCE INT NULL, --曾经是否存在话费补贴
IS_HF_BT INT NULL --当前是否存在话费补贴
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.1:更新话费补贴信息';
SET @START_TIME = NOW();
--更新话费补贴信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.HF_BT_LIMIT_DATE = B.LIMIT_DATE,
A.HF_BT_LEFT_M = B.BT_LEFT_M,
A.HF_BT_FEE = B.AMOUNT,
A.HF_SUM_CNT = B.SUM_CNT,
A.HF_VAILD_CNT = B.VAILD_CNT,
A.HF_INVAILD_CNT = B.INVAILD_CNT
FROM SD_TEMP_SERV_CDMA_BT_ETL AS B
WHERE A.SERV_ID = B.SERV_ID
AND B.RN = 1
AND B.DATA_SOUCE_DL = '话费补贴';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.2:更新终端补贴信息';
SET @START_TIME = NOW();
--更新终端补贴信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.ZD_BT_LIMIT_DATE = B.LIMIT_DATE,
A.ZD_BT_LEFT_M = B.BT_LEFT_M,
A.ZD_BT_FEE = B.AMOUNT,
A.ZD_SUM_CNT = B.SUM_CNT,
A.ZD_VAILD_CNT = B.VAILD_CNT,
A.ZD_INVAILD_CNT = B.INVAILD_CNT
FROM SD_TEMP_SERV_CDMA_BT_ETL AS B
WHERE A.SERV_ID = B.SERV_ID
AND B.RN = 1
AND B.DATA_SOUCE_DL = '终端补贴';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.3:更新是否补贴标识';
SET @START_TIME = NOW();
--更新是否补贴标识
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT_ONCE = 0,
IS_ZD_BT = 0,
IS_HF_BT_ONCE = 0,
IS_HF_BT = 0;
COMMIT;
--更新曾经是否存在终端补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT_ONCE = 1
WHERE ZD_SUM_CNT > 0;
COMMIT;
--更新曾经是否存在话费补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HF_BT_ONCE = 1
WHERE HF_SUM_CNT > 0;
COMMIT;
--更新当前是否存在终端补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT = 1
WHERE ZD_VAILD_CNT > 0;
COMMIT;
--更新当前是否存在话费补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HF_BT = 1
WHERE HF_VAILD_CNT > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9:增加产品类型、是否融合、是否副卡、DATA_SOUCE_ID';
SET @START_TIME = NOW();
--增加产品类型、是否融合、是否副卡、DATA_SOUCE_ID(是什么?)
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
PROD_TYPE VARCHAR(60) NULL, --产品类型
PROD_TYPE1 VARCHAR(60) NULL, --产品中类
IS_RH INT NULL, --是否融合
IS_FK INT NULL, --是否副卡
DATA_SOUCE_ID NUMERIC(10) NULL, --?
BT_DISC_ID NUMERIC(10) NULL --补贴套餐标识
);
--更新产品类型
UPDATE SD_TEMP_CDMA_BASIC_INFO SET PROD_TYPE = '其它产品';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.1:更新是否副卡';
SET @START_TIME = NOW();
--更新是否副卡
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_FK = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_FK = 1
FROM RPT_COMM_CM_MSDISC_2010 AS B,REPORT.DIM_YDRB_DISC AS C
WHERE B.MONTH_ID = @MONTH_ID
AND C.DISC_TYPE = '副卡'
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND A.SERV_ID = B.SERV_ID
AND B.LIMIT_DATE > @MONTH_LAST_DAY;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.2:更新是否融合';
SET @START_TIME = NOW();
--更新是否融合
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_RH = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_RH = 1
FROM RPT_COMM_CM_MSDISC_2010 AS B,RPT_COMM_CM_MSDISC_2010 AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.MSINFO_ID = C.MSINFO_ID
AND B.MONTH_ID = @MONTH_ID
AND C.MONTH_ID = @MONTH_ID
AND C.PROD_ID = ANY(SELECT PROD_ID FROM DIM_PROD WHERE STAT_CAT_ID IN( 0,1,2,7,8,9 ) ) --关联固话或者宽带(非ITV)
AND B.PROD_ID IN (3204,3205 ) ;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.3:更新DATA_SOUCE_ID,补贴套餐标识';
SET @START_TIME = NOW();
--更新DATA_SOUCE_ID,补贴套餐标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A SET A.DATA_SOUCE_ID = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.DATA_SOUCE_ID = B.DATA_SOUCE_ID,
A.BT_DISC_ID = B.DISC_ID
FROM SD_TEMP_SERV_CDMA_BT AS B,SD_TEMP_SERV_CDMA_BT_MLEVEL AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.DISC_LEVEL = C.DISC_LEVEL;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.DATA_SOUCE_ID = 11
FROM RPT_COMM_CM_MSDISC_2010 AS B,REPORT.DIM_YDRB_DISC AS C,REPORT.RPT_DAILY_CDMA_TERMINAL_DISC_V2 AS D
WHERE B.MONTH_ID = @MONTH_ID
AND C.DISC_TYPE = '合约融合'
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND B.CREATE_DATE >= C.MOD_DATE --7月竣工开始计算
AND B.LIMIT_DATE > @MONTH_LAST_DAY
AND A.SERV_ID = B.SERV_ID
AND A.BT_DISC_ID = D.DISC_ID
AND D.IS_DCP_HY = 1; --单产品合约套餐
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.4:更新产品类型';
SET @START_TIME = NOW();
--更新产品类型
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE = CASE WHEN A.IS_RH = 0 AND A.PROD_ID = 3205 THEN '后付费单产品'
WHEN A.IS_RH = 0 AND(A.PROD_ID <> 3205 OR A.PROD_ID IS NULL) THEN '预付费单产品'
WHEN A.IS_RH = 1 AND A.SERV_GRP_TYPE = '01' THEN '政企融合'
WHEN A.IS_RH = 1 AND(A.SERV_GRP_TYPE <> '01' OR A.SERV_GRP_TYPE IS NULL) THEN '家庭融合' END;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE = '无线宽带'
WHERE A.WIRELESS_TYPE > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.5:更新产品中类(口径1)';
SET @START_TIME = NOW();
--更新产品中类(口径1)
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A SET A.PROD_TYPE1 = A.PROD_TYPE;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = CASE WHEN A.DATA_SOUCE_ID IN( 1,2,3,4) THEN '合约计划'
WHEN A.DATA_SOUCE_ID = 6 THEN '乐享5折'
ELSE PROD_TYPE1
END
WHERE A.PROD_TYPE1 = '后付费单产品';
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = '合约计划'
WHERE A.DATA_SOUCE_ID = 11
AND A.PROD_TYPE IN( '后付费单产品','政企融合','家庭融合' )
AND A.PROD_ID = 3205;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = '副卡'
WHERE A.IS_FK = 1;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10:增加客户信息:1、在网时长(取客户下最早产品的在网时长);2、客户下移动号码数';
SET @START_TIME = NOW();
--增加客户信息:1、在网时长(取客户下最早产品的在网时长);2、客户下移动号码数
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
KH_ONLINE_TIME NUMERIC(10) NULL --在网时长
,NBR_COUNT NUMERIC(10) NULL --移动号码数
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10.1:更新客户在网时长';
SET @START_TIME = NOW();
--获取客户在网时长
--汇总在用用户表,结果插入临时表
DROP TABLE IF EXISTS SD_TEMP_CUST_ONLINE_TIME;
SELECT CUST_ID,MAX(ONLINE_TIME) AS ONLINE_TIME
INTO SD_TEMP_CUST_ONLINE_TIME
FROM RPT_COMM_CM_SERV_2010
WHERE MONTH_ID = @MONTH_ID
GROUP BY CUST_ID;
COMMIT;
--更新客户在网时长
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.KH_ONLINE_TIME = B.ONLINE_TIME
FROM SD_TEMP_CUST_ONLINE_TIME AS B
WHERE A.CUST_ID = B.CUST_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10.2:更新号码数';
SET @START_TIME = NOW();
--获取客户下移动号码数量,插入临时表
DROP TABLE IF EXISTS SD_TEMP_CUST_NBR_COUNT;
SELECT CUST_ID,COUNT(DISTINCT SERV_ID) AS NBR_COUNT
INTO SD_TEMP_CUST_NBR_COUNT
FROM SD_TEMP_CDMA_BASIC_INFO
WHERE PROD_ID IN (3204,3205)
GROUP BY CUST_ID;
COMMIT;
--更新号码数
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.NBR_COUNT = B.NBR_COUNT
FROM SD_TEMP_CUST_NBR_COUNT AS B
WHERE A.CUST_ID = B.CUST_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11:增加终端信息';
SET @START_TIME = NOW();
--增加终端信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
BRAND VARCHAR(100) NULL, --本月在用终端
TERM_TYPE VARCHAR(60) NULL, --本月在用终端类型(1X,3G,4G)
TERM_DUR NUMERIC(10) NULL, --本月在用终端使用时长
TERM_PRICE NUMERIC(10) NULL, --本月在用终端价格
TERM_CNT NUMERIC(10) NULL, --该用户三年内使用终端数量
BRAND_LAST1 VARCHAR(100) NULL, --上个终端
TERM_TYPE_LAST1 VARCHAR(60) NULL, --上个终端类型
TERM_DUR_LAST1 NUMERIC(10) NULL, --上个终端类型使用时长
TERM_PRICE_LAST1 NUMERIC(10) NULL, --上个终端价格
BRAND_LAST2 VARCHAR(100) NULL, --上上个终端
TERM_TYPE_LAST2 VARCHAR(60) NULL, --上上个终端类型
TERM_DUR_LAST2 NUMERIC(10) NULL, --上上个终端类型使用时长
TERM_PRICE_LAST2 NUMERIC(10) NULL, --上上个终端价格
BRAND_LAST3 VARCHAR(100) NULL, --上上上个终端
TERM_TYPE_LAST3 VARCHAR(60) NULL, --上上上个终端类型
TERM_DUR_LAST3 NUMERIC(10) NULL, --上上上个终端类型使用时长
TERM_PRICE_LAST3 NUMERIC(10) NULL, --上上上个终端价格
PRE_PHONE_STRCODE VARCHAR(255) NULL, --上个月使用终端串号
PHONE_STRCODE VARCHAR(255) NULL, --本月使用终端串号
NEXT_PHONE_STRCODE VARCHAR(255) NULL, --下个月使用终端串号
IS_HJ INT NULL --本月是否换机
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.1:更新本月终端及串号';
SET @START_TIME = NOW();
--更新本月终端及串号
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND = B.BRAND,
A.TERM_TYPE = B.BRAND_TYPE,
A.PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.2:更新本月终端使用时长';
SET @START_TIME = NOW();
--更新本月终端使用时长,价格
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_DUR = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)
,A.TERM_PRICE = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B
WHERE A.SERV_ID = B.SERV_ID
AND A.ACC_NBR = B.ACC_NBR
AND A.PHONE_STRCODE = B.PHONE_STRCODE;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.3:更新本月终端价格';
SET @START_TIME = NOW();
--更新本月终端价格
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET BRAND = STR_REPLACE(BRAND ,' ','-') WHERE BRAND LIKE '% %' ;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_PRICE = B.TERMINAL_PRICE_0 -- ISNULL(A.ZD_BT_FEE,0)
FROM T_DX_JX_11 AS B
WHERE A.BRAND = B.TERMINAL_TYPE AND A.TERM_PRICE IS NULL;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_PRICE = B.TERMINAL_PRICE -- ISNULL(A.ZD_BT_FEE,0)
FROM T_DX_JX_11_1 AS B
WHERE A.BRAND = B.TERMINAL_TYPE AND A.TERM_PRICE IS NULL;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.4:获取上月终端';
SET @START_TIME = NOW();
--获取上月终端
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PRE_PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @PRE_MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.5:获取下月终端';
SET @START_TIME = NOW();
--获取下月终端
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.NEXT_PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @NEXT_MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.6:更新IS_HJ';
SET @START_TIME = NOW();
--初始化IS_HJ字段
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 0;
COMMIT;
--更新IS_HJ(确认换机)
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 1
WHERE PRE_PHONE_STRCODE <> PHONE_STRCODE AND PHONE_STRCODE = NEXT_PHONE_STRCODE;
COMMIT;
--更新IS_HJ(未真正换机)
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 2
WHERE PRE_PHONE_STRCODE <> PHONE_STRCODE AND PHONE_STRCODE <> NEXT_PHONE_STRCODE;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.7:更新TERM_CNT';
SET @START_TIME = NOW();
--创建临时表,获取近3个月终端使用个数
DROP TABLE IF EXISTS SD_TEMP_BUF_CDMA_TERM_CNT;
SELECT SERV_ID,COUNT(DISTINCT PHONE_STRCODE) CNT
INTO SD_TEMP_BUF_CDMA_TERM_CNT
FROM BUF_CMDA_TERMINAL_INFO
WHERE REGISTER_TIME <= @MONTH_LAST_DAY
AND REGISTER_TIME > DATEFORMAT(DATEADD(YY,-3,@MONTH_LAST_DAY),'YYYY-MM-DD')
GROUP BY SERV_ID;
COMMIT;
--更新TERM_CNT
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_CNT = B.CNT
FROM SD_TEMP_BUF_CDMA_TERM_CNT AS B
WHERE A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.8:创建临时表,获取用户本用终端排序序号';
SET @START_TIME = NOW();
--创建临时表,获取用户本用终端排序序号
DROP TABLE IF EXISTS SD_TEMP_BUF_CDMA_TERM_RANK;
SELECT A.SERV_ID,MIN(RANK_ID) RANK_ID
INTO SD_TEMP_BUF_CDMA_TERM_RANK
FROM BUF_CMDA_TERMINAL_INFO AS A,SD_TEMP_CDMA_BASIC_INFO AS B
WHERE A.REGISTER_TIME <= @MONTH_LAST_DAY
AND A.SERV_ID = B.SERV_ID
AND A.PHONE_STRCODE <> B.PHONE_STRCODE
GROUP BY A.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.9:更新上个终端信息,序号为上一步得到的最小序号+1';
SET @START_TIME = NOW();
--更新上个终端信息,序号为上一步得到的最小序号+1
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST1 = B.BRAND,
A.TERM_TYPE_LAST1 = B.BRAND_TYPE,
A.TERM_DUR_LAST1 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR,
A.TERM_PRICE_LAST1 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.10:更新上上个终端信息,序号为上一步得到的最小序号+2';
SET @START_TIME = NOW();
--更新上上个终端信息,序号为上一步得到的最小序号+2
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST2 = B.BRAND,
A.TERM_TYPE_LAST2 = B.BRAND_TYPE,
A.TERM_DUR_LAST2 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR - A.TERM_DUR_LAST1,
A.TERM_PRICE_LAST2 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID + 1;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.11:更新上上上个终端信息,序号为上一步得到的最小序号+3';
SET @START_TIME = NOW();
--更新上上上个终端信息,序号为上一步得到的最小序号+3
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST3 = B.BRAND,
A.TERM_TYPE_LAST3 = B.BRAND_TYPE,
A.TERM_DUR_LAST3 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR - A.TERM_DUR_LAST1 - A.TERM_DUR_LAST2,
A.TERM_PRICE_LAST3 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID + 2;
COMMIT;
--增加新终端价格字段,已经废弃,新增是为了保留结构一至
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD TERM_PRICE_NEW NUMERIC(10) NULL;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 12:重命名目标表';
SET @START_TIME = NOW();
SET @SCRIPT = 'ALTER TABLE SD_TEMP_CDMA_BASIC_INFO RENAME BUF_SERV_CDMA_BASIC_INFO_'||@MONTH_ID ||'';
EXECUTE IMMEDIATE @SCRIPT;
COMMIT;
TRUNCATE TABLE BUF_SERV_CDMA_BASIC_INFO;
SET @SCRIPT = 'INSERT INTO BUF_SERV_CDMA_BASIC_INFO SELECT * FROM BUF_SERV_CDMA_BASIC_INFO_'||@MONTH_ID ||'';
EXECUTE IMMEDIATE @SCRIPT;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
EXCEPTION
WHEN OTHERS THEN
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,-1,SQLCODE,ERRORMSG());
ROLLBACK;
END;
IN @LOAD_DATE VARCHAR(8) DEFAULT CONVERT(VARCHAR(8), DATEFORMAT(DATEADD(MM,-1,NOW()), 'YYYYMMDD'))
)
/*******************************************************************
-- PURPOSE : 换机模型汇总过程
-- AUTHER : 唐**
-- FREQUENCY : 按要求生成每月历史数据
-- DATE : 2016-01-05
---------------------------------------------------------------
-- 输入参数 :LOAD_DATE 表的生产日期,默认取系统时间
-- 结果表 : FCT_CDMA_TERM_MODEL(分区表按月份分区)
---------------------------------------------------------------
-- MODIFIED HISTORY
-- DATE AUTHOR VERSION DESCRIPTION
-- 2016-01-05 唐** V1.0 创建过程
*******************************************************************/
BEGIN
--日志需求变量
DECLARE @OBJECT_NAME VARCHAR(30) DEFAULT 'P_SD_FCT_CDMA_TERM_MODEL';
DECLARE @STEP_LOGS VARCHAR(200);
DECLARE @START_TIME TIMESTAMP;
DECLARE @ROW_CNT NUMERIC(13);
--过程变量
DECLARE @MONTH_ID INT; --统计月份
DECLARE @MONTH_LAST_DAY VARCHAR(10); --统计月最后一天
DECLARE @NEXT_MONTH_FIRST_DAY VARCHAR(10); --统计月下月第一天
DECLARE @PRE_MONTH_ID INT; --统计上月
DECLARE @PRE1_MONTH_ID INT; --统计上上月
DECLARE @PRE2_MONTH_ID INT; --统计上上上月
DECLARE @NEXT_MONTH_ID INT; --统计下月
DECLARE @SCRIPT VARCHAR(3000);
--变量初始化
SET @MONTH_ID = CONVERT(INT,DATEFORMAT(@LOAD_DATE,'YYYYMM'));
SET @MONTH_LAST_DAY = DATEFORMAT(DATEADD(DD,-1,DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYYMM')||'01'),'YYYY-MM-DD');
SET @NEXT_MONTH_FIRST_DAY = DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYY-MM')||'-01';
SET @PRE_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-1,@LOAD_DATE),'YYYYMM'));
SET @PRE1_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-2,@LOAD_DATE),'YYYYMM'));
SET @PRE2_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,-3,@LOAD_DATE),'YYYYMM'));
SET @NEXT_MONTH_ID = CONVERT(INT,DATEFORMAT(DATEADD(MM,1,@LOAD_DATE),'YYYYMM'));
-------------------------------------------------------------------------------------------------------------------------
SET @STEP_LOGS = 'STEP 1:取全网用户及其基础特征信息';
SET @START_TIME = NOW();
--删除临时表
DROP TABLE IF EXISTS SD_TEMP_CDMA_BASIC_INFO; COMMIT;
--插入全网用户及其基础特征信息到临时表
SELECT MONTH_ID
,SERV_ID
,SERV_NBR
,ACC_NBR
,CUST_NAME
--,CASE WHEN LENGTH(CUST_NAME) > 4 THEN '公司客户' ELSE '私人客户' END AS CUST_NAME_TYPE
,CUST_ID
,SERV_GRP_TYPE
,PROD_ID
--,CASE WHEN PROD_ID = 3204 THEN '预付费' WHEN PROD_ID = 3205 THEN '后付费' ELSE '其它' END AS PAY_TYPE
--,CASE WHEN FINISH_DATE IS NULL THEN CREATE_DATE ELSE FINISH_DATE END AS INNET_DT
,CREATE_DATE
,FINISH_DATE
,ONLINE_TIME AS YH_ONLINE_TIME
,IS_ZFK
,IS_CZ
,STATE
,WIRELESS_TYPE
INTO SD_TEMP_CDMA_BASIC_INFO
FROM RPT_COMM_CM_SERV_CDMA_2010
WHERE MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2:增加是否VPN用户/是否VIP用户/客户类型/付费类型/入网时间信息';
SET @START_TIME = NOW();
--增加是否VPN用户/是否VIP用户/客户类型/付费类型/入网时间信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
IS_VPN INT NULL
,IS_VIP INT NULL
,CUST_NAME_TYPE VARCHAR(30) NULL
,PAY_TYPE VARCHAR(30) NULL
,INNET_DT DATE NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.1:更新客户类型/付费类型/入网时间信息';
SET @START_TIME = NOW();
--更新客户类型/付费类型/入网时间信息
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET CUST_NAME_TYPE = CASE WHEN LENGTH(CUST_NAME) > 4 THEN '公司客户' ELSE '私人客户' END
,PAY_TYPE = CASE WHEN PROD_ID = 3204 THEN '预付费' WHEN PROD_ID = 3205 THEN '后付费' ELSE '其它' END
,INNET_DT = CASE WHEN FINISH_DATE IS NULL THEN CREATE_DATE ELSE FINISH_DATE END;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.2:更新是否VPN用户';
SET @START_TIME = NOW();
--更新是否VPN用户
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_VPN = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET IS_VPN = 1
FROM VPN_ZB_LIST AS B
WHERE A.ACC_NBR = B.ACC_NBR;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 2.3:更新是否VIP用户';
SET @START_TIME = NOW();
--更新是否VIP用户
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_VIP = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET IS_VIP = 1
FROM REPORT.RPT_KF_CDMA_ZGDPZ_QD AS B, --张云娇维护
RPT_COMM_CM_SERV_CDMA_2010 AS C
WHERE B.YEAR = 2016
AND A.SERV_ID = C.SERV_ID
AND C.CUST_NBR = B.CQ_CUST_NBR
AND C.MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3:增加付费账户类型(对公、对私、其它)、缴费方式';
SET @START_TIME = NOW();
--增加付费账户类型(对公、对私、其它)、缴费方式
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
ACCT_ID NUMERIC(10) NULL
,PAYMENT_METHOD VARCHAR(6) NULL
,BANK_ACCT_TYPE VARCHAR(6) NULL
,PAY_ACC_TYPE VARCHAR(40) NULL
,PAY_MET_TYPE VARCHAR(40) NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.1:初始化付费账户类型';
SET @START_TIME = NOW();
--初始化付费账户类型
UPDATE SD_TEMP_CDMA_BASIC_INFO SET PAY_ACC_TYPE = '其它',PAY_MET_TYPE = '其它';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.2:获取帐户标识';
SET @START_TIME = NOW();
--获取帐户标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.ACCT_ID = B.ACCT_ID
FROM ZWFXDEV.TB_CM_SERVACCT AS B
WHERE A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.3:获取付费帐户标识、缴费标识';
SET @START_TIME = NOW();
--获取付费帐户标识、缴费标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PAYMENT_METHOD = B.PAYMENT_METHOD
,A.BANK_ACCT_TYPE = B.BANK_ACCT_TYPE
FROM ZWFXDEV.TB_CM_BANKACCT AS B
WHERE A.ACCT_ID = B.ACCT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.4:更新付费账户类型';
SET @START_TIME = NOW();
--更新付费账户类型
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET PAY_ACC_TYPE = B.DICT_NAME
FROM ZWFXDEV.TB_PC_DICT AS B
WHERE B.DICT_TYPEID = 'CM_ACCTTYPE'
AND A.BANK_ACCT_TYPE = B.DICT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 3.5:更新缴费方式';
SET @START_TIME = NOW();
--更新缴费方式
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET PAY_MET_TYPE = B.DICT_NAME
FROM ZWFXDEV.TB_PC_DICT AS B
WHERE B.DICT_TYPEID = 'CM_PAYM'
AND A.PAYMENT_METHOD = B.DICT_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4:增加用户行为信息';
SET @START_TIME = NOW();
--增加用户行为信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
STM_DATA_01 NUMERIC(12,2) NULL,
MOU_CALLER_01 NUMERIC(12,2) NULL,
MOU_CALL_01 NUMERIC(12,2) NULL,
FEE_01 NUMERIC(12,2) NULL,
FEE_NEW_01 NUMERIC(12,2) NULL,
MGS_COUNTS_01 NUMERIC(12) NULL,
STM_DATA_02 NUMERIC(12,2) NULL,
MOU_CALLER_02 NUMERIC(12,2) NULL,
MOU_CALL_02 NUMERIC(12,2) NULL,
FEE_02 NUMERIC(12,2) NULL,
FEE_NEW_02 NUMERIC(12,2) NULL,
MGS_COUNTS_02 NUMERIC(12) NULL,
STM_DATA_03 NUMERIC(12,2) NULL,
MOU_CALLER_03 NUMERIC(12,2) NULL,
MOU_CALL_03 NUMERIC(12,2) NULL,
FEE_03 NUMERIC(12,2) NULL,
FEE_NEW_03 NUMERIC(12,2) NULL,
MGS_COUNTS_03 NUMERIC(12) NULL
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.1:更新上月行为信息';
SET @START_TIME = NOW();
--更新上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_01 = B.STM_DATA,
A.MOU_CALLER_01 = B.MOU_CALL,
A.MOU_CALL_01 = B.MOU,
A.FEE_01 = B.FEE,
A.FEE_NEW_01 = B.FEE_NEW,
A.MGS_COUNTS_01 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.2:更新上上月行为信息';
SET @START_TIME = NOW();
--更新上上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_02 = B.STM_DATA,
A.MOU_CALLER_02 = B.MOU_CALL,
A.MOU_CALL_02 = B.MOU,
A.FEE_02 = B.FEE,
A.FEE_NEW_02 = B.FEE_NEW,
A.MGS_COUNTS_02 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE1_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 4.3:更新上上上月行为信息';
SET @START_TIME = NOW();
--更新上上上月行为信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.STM_DATA_03 = B.STM_DATA,
A.MOU_CALLER_03 = B.MOU_CALL,
A.MOU_CALL_03 = B.MOU,
A.FEE_03 = B.FEE,
A.FEE_NEW_03 = B.FEE_NEW,
A.MGS_COUNTS_03 = B.MGS_COUNTS
FROM RPT_COMM_CM_SERV_CDMA_2010 AS B
WHERE B.MONTH_ID = @PRE2_MONTH_ID
AND A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 5:增加是否活跃用户';
SET @START_TIME = NOW();
--增加是否活跃用户
--前三个月的流量+通话+短信大于30为合约用户
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD IS_HIGH_USE INT NULL;
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_HIGH_USE = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_01 + STM_DATA_01 + MGS_COUNTS_01) > 30;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_02 + STM_DATA_02 + MGS_COUNTS_02) > 30;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_HIGH_USE = 1
WHERE (MOU_CALL_03 + STM_DATA_03 + MGS_COUNTS_03) > 30;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 6:增加主套餐信息';
SET @START_TIME = NOW();
--增加主套餐信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD (MAIN_DISC_ID NUMERIC(10) NULL,MAIN_PRICE_ID NUMERIC(10) NULL,MAIN_DISC_NAME VARCHAR(100));
--更新主套餐信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.MAIN_DISC_ID = B.DISC_ID,
A.MAIN_PRICE_ID = B.PRICE_ID,
A.MAIN_DISC_NAME = C.DISC_NAME
FROM RPT_COMM_CM_MSDISC_2010 AS B,DIM_MAIN_DISC AS C
WHERE B.PROD_ID IN (3204,3205)
AND B.MONTH_ID = @MONTH_ID
AND A.SERV_ID = B.SERV_ID
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND B.LIMIT_DATE >= @MONTH_LAST_DAY;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7:处理补贴信息需要创建多个临时表';
SET @START_TIME = NOW();
--处理补贴信息需要创建多个临时表
--临时表1(SD_TEMP_SERV_CDMA_BT):存放补贴基础信息
--临时表2(SD_TEMP_SERV_CDMA_BT_MLEVEL):获取最小LEVEL,以得到DATA_SOUCE_ID
--临时表3(SD_TEMP_SERV_CDMA_BT_ETL):处理补贴信息:当有多个补贴时,取最近一个补贴
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.1:获取补贴基础信息';
SET @START_TIME = NOW();
--删除临时表1
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT;
--获取补贴基础信息
SELECT A.SERV_ID,
B.DISC_ID,
B.PRICE_ID,
C.DATA_SOUCE_DL,
B.CREATE_DATE,
B.LIMIT_DATE,
B.MSINFO_ID,
C.DISC_LEVEL,
C.DISC_NAME,
C.PRICE_NAME,
C.DATA_SOUCE_ID,
C.DATA_SOUCE_NAME
INTO SD_TEMP_SERV_CDMA_BT
FROM SD_TEMP_CDMA_BASIC_INFO AS A,RPT_COMM_CM_MSDISC_2010 AS B,REPORT.RPT_DAILY_CDMA_TERMINAL_DISC_V2 AS C
WHERE B.MONTH_ID = @MONTH_ID
AND A.SERV_ID = B.SERV_ID
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND C.DATA_SOUCE_DL IN ('终端补贴','话费补贴');
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.2:获取最小LEVEL,以得到DATA_SOUCE_ID';
SET @START_TIME = NOW();
--删除临时表2
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT_MLEVEL;
--获取最小LEVEL,以得到DATA_SOUCE_ID
SELECT SERV_ID,
MIN(DISC_LEVEL) AS DISC_LEVEL
INTO SD_TEMP_SERV_CDMA_BT_MLEVEL
FROM SD_TEMP_SERV_CDMA_BT
GROUP BY SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.3:获取补贴金额';
SET @START_TIME = NOW();
--获取补贴金额
ALTER TABLE SD_TEMP_SERV_CDMA_BT ADD AMOUNT NUMERIC(12,2) NULL;
/* UPDATE SD_TEMP_SERV_CDMA_BT AS A
SET A.AMOUNT=B.AMOUNT
FROM REPORT.RPT_MONTHLY_CDMA_TERMINAL_ALLOWANCE_LIST_2010 AS B
WHERE A.SERV_ID=B.SERV_ID
AND A.DISC_ID=B.DISC_ID
AND B.MONTH_ID = @MONTH_ID
AND B.AMOUNT > 0;
COMMIT; */
--更新口径:20160106林春芳
UPDATE SD_TEMP_SERV_CDMA_BT AS A
SET A.AMOUNT=B.AMOUNT/100
FROM zwfxdev.tb_ms_stamps_exchange_union AS B --表名需要小写
WHERE A.SERV_ID=B.SERV_ID
AND A.DISC_ID=B.DISC_ID
AND B.MONTH_ID = @MONTH_ID
AND B.AMOUNT > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 7.4:处理补贴信息:当有多个补贴时,取最近一个补贴';
SET @START_TIME = NOW();
--删除临时表3
DROP TABLE IF EXISTS SD_TEMP_SERV_CDMA_BT_ETL;
--处理补贴信息:当有多个补贴时,取最近一个补贴
SELECT *,
CASE WHEN DATEDIFF(MM,@NEXT_MONTH_FIRST_DAY,LIMIT_DATE) <= 0 THEN NULL ELSE DATEDIFF(MM,@NEXT_MONTH_FIRST_DAY,LIMIT_DATE) END BT_LEFT_M,
ROW_NUMBER() OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL ORDER BY LIMIT_DATE DESC) RN,
COUNT(DISC_ID) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) SUM_CNT,
COUNT(CASE WHEN LIMIT_DATE > @NEXT_MONTH_FIRST_DAY THEN DISC_ID ELSE NULL END) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) VAILD_CNT,
COUNT(CASE WHEN LIMIT_DATE <= @NEXT_MONTH_FIRST_DAY THEN DISC_ID ELSE NULL END) OVER (PARTITION BY SERV_ID,DATA_SOUCE_DL) INVAILD_CNT
INTO SD_TEMP_SERV_CDMA_BT_ETL
FROM SD_TEMP_SERV_CDMA_BT;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8:增加补贴相关信息';
SET @START_TIME = NOW();
--增加补贴相关信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
HF_BT_LIMIT_DATE DATE NULL, --话费补贴到期时间
ZD_BT_LIMIT_DATE DATE NULL, --终端补贴到期时间
HF_BT_LEFT_M NUMERIC(10) NULL, --话费补贴到期时长
ZD_BT_LEFT_M NUMERIC(10) NULL, --终端补贴到期时长
ZD_BT_FEE NUMERIC(10,2) NULL, --终端补贴金额
HF_BT_FEE NUMERIC(10,2) NULL, --话费补贴金额
ZD_SUM_CNT NUMERIC(10) NULL, --终端补贴总次数
ZD_VAILD_CNT NUMERIC(10) NULL, --终端补贴有效次数
ZD_INVAILD_CNT NUMERIC(10) NULL, --终端补贴无效次数
HF_SUM_CNT NUMERIC(10) NULL, --话费补贴总次数
HF_VAILD_CNT NUMERIC(10) NULL, --话费补贴有效次数
HF_INVAILD_CNT NUMERIC(10) NULL, --话费补贴无效次数
IS_ZD_BT_ONCE INT NULL, --曾经是否存在终端补贴
IS_ZD_BT INT NULL, --当前是否存在终端补贴
IS_HF_BT_ONCE INT NULL, --曾经是否存在话费补贴
IS_HF_BT INT NULL --当前是否存在话费补贴
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.1:更新话费补贴信息';
SET @START_TIME = NOW();
--更新话费补贴信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.HF_BT_LIMIT_DATE = B.LIMIT_DATE,
A.HF_BT_LEFT_M = B.BT_LEFT_M,
A.HF_BT_FEE = B.AMOUNT,
A.HF_SUM_CNT = B.SUM_CNT,
A.HF_VAILD_CNT = B.VAILD_CNT,
A.HF_INVAILD_CNT = B.INVAILD_CNT
FROM SD_TEMP_SERV_CDMA_BT_ETL AS B
WHERE A.SERV_ID = B.SERV_ID
AND B.RN = 1
AND B.DATA_SOUCE_DL = '话费补贴';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.2:更新终端补贴信息';
SET @START_TIME = NOW();
--更新终端补贴信息
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.ZD_BT_LIMIT_DATE = B.LIMIT_DATE,
A.ZD_BT_LEFT_M = B.BT_LEFT_M,
A.ZD_BT_FEE = B.AMOUNT,
A.ZD_SUM_CNT = B.SUM_CNT,
A.ZD_VAILD_CNT = B.VAILD_CNT,
A.ZD_INVAILD_CNT = B.INVAILD_CNT
FROM SD_TEMP_SERV_CDMA_BT_ETL AS B
WHERE A.SERV_ID = B.SERV_ID
AND B.RN = 1
AND B.DATA_SOUCE_DL = '终端补贴';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 8.3:更新是否补贴标识';
SET @START_TIME = NOW();
--更新是否补贴标识
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT_ONCE = 0,
IS_ZD_BT = 0,
IS_HF_BT_ONCE = 0,
IS_HF_BT = 0;
COMMIT;
--更新曾经是否存在终端补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT_ONCE = 1
WHERE ZD_SUM_CNT > 0;
COMMIT;
--更新曾经是否存在话费补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HF_BT_ONCE = 1
WHERE HF_SUM_CNT > 0;
COMMIT;
--更新当前是否存在终端补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_ZD_BT = 1
WHERE ZD_VAILD_CNT > 0;
COMMIT;
--更新当前是否存在话费补贴
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HF_BT = 1
WHERE HF_VAILD_CNT > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9:增加产品类型、是否融合、是否副卡、DATA_SOUCE_ID';
SET @START_TIME = NOW();
--增加产品类型、是否融合、是否副卡、DATA_SOUCE_ID(是什么?)
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
PROD_TYPE VARCHAR(60) NULL, --产品类型
PROD_TYPE1 VARCHAR(60) NULL, --产品中类
IS_RH INT NULL, --是否融合
IS_FK INT NULL, --是否副卡
DATA_SOUCE_ID NUMERIC(10) NULL, --?
BT_DISC_ID NUMERIC(10) NULL --补贴套餐标识
);
--更新产品类型
UPDATE SD_TEMP_CDMA_BASIC_INFO SET PROD_TYPE = '其它产品';
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.1:更新是否副卡';
SET @START_TIME = NOW();
--更新是否副卡
UPDATE SD_TEMP_CDMA_BASIC_INFO SET IS_FK = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_FK = 1
FROM RPT_COMM_CM_MSDISC_2010 AS B,REPORT.DIM_YDRB_DISC AS C
WHERE B.MONTH_ID = @MONTH_ID
AND C.DISC_TYPE = '副卡'
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND A.SERV_ID = B.SERV_ID
AND B.LIMIT_DATE > @MONTH_LAST_DAY;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.2:更新是否融合';
SET @START_TIME = NOW();
--更新是否融合
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_RH = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.IS_RH = 1
FROM RPT_COMM_CM_MSDISC_2010 AS B,RPT_COMM_CM_MSDISC_2010 AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.MSINFO_ID = C.MSINFO_ID
AND B.MONTH_ID = @MONTH_ID
AND C.MONTH_ID = @MONTH_ID
AND C.PROD_ID = ANY(SELECT PROD_ID FROM DIM_PROD WHERE STAT_CAT_ID IN( 0,1,2,7,8,9 ) ) --关联固话或者宽带(非ITV)
AND B.PROD_ID IN (3204,3205 ) ;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.3:更新DATA_SOUCE_ID,补贴套餐标识';
SET @START_TIME = NOW();
--更新DATA_SOUCE_ID,补贴套餐标识
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A SET A.DATA_SOUCE_ID = 0;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.DATA_SOUCE_ID = B.DATA_SOUCE_ID,
A.BT_DISC_ID = B.DISC_ID
FROM SD_TEMP_SERV_CDMA_BT AS B,SD_TEMP_SERV_CDMA_BT_MLEVEL AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.DISC_LEVEL = C.DISC_LEVEL;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.DATA_SOUCE_ID = 11
FROM RPT_COMM_CM_MSDISC_2010 AS B,REPORT.DIM_YDRB_DISC AS C,REPORT.RPT_DAILY_CDMA_TERMINAL_DISC_V2 AS D
WHERE B.MONTH_ID = @MONTH_ID
AND C.DISC_TYPE = '合约融合'
AND B.DISC_ID = C.DISC_ID
AND B.PRICE_ID = C.PRICE_ID
AND B.CREATE_DATE >= C.MOD_DATE --7月竣工开始计算
AND B.LIMIT_DATE > @MONTH_LAST_DAY
AND A.SERV_ID = B.SERV_ID
AND A.BT_DISC_ID = D.DISC_ID
AND D.IS_DCP_HY = 1; --单产品合约套餐
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.4:更新产品类型';
SET @START_TIME = NOW();
--更新产品类型
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE = CASE WHEN A.IS_RH = 0 AND A.PROD_ID = 3205 THEN '后付费单产品'
WHEN A.IS_RH = 0 AND(A.PROD_ID <> 3205 OR A.PROD_ID IS NULL) THEN '预付费单产品'
WHEN A.IS_RH = 1 AND A.SERV_GRP_TYPE = '01' THEN '政企融合'
WHEN A.IS_RH = 1 AND(A.SERV_GRP_TYPE <> '01' OR A.SERV_GRP_TYPE IS NULL) THEN '家庭融合' END;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE = '无线宽带'
WHERE A.WIRELESS_TYPE > 0;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 9.5:更新产品中类(口径1)';
SET @START_TIME = NOW();
--更新产品中类(口径1)
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A SET A.PROD_TYPE1 = A.PROD_TYPE;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = CASE WHEN A.DATA_SOUCE_ID IN( 1,2,3,4) THEN '合约计划'
WHEN A.DATA_SOUCE_ID = 6 THEN '乐享5折'
ELSE PROD_TYPE1
END
WHERE A.PROD_TYPE1 = '后付费单产品';
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = '合约计划'
WHERE A.DATA_SOUCE_ID = 11
AND A.PROD_TYPE IN( '后付费单产品','政企融合','家庭融合' )
AND A.PROD_ID = 3205;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PROD_TYPE1 = '副卡'
WHERE A.IS_FK = 1;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10:增加客户信息:1、在网时长(取客户下最早产品的在网时长);2、客户下移动号码数';
SET @START_TIME = NOW();
--增加客户信息:1、在网时长(取客户下最早产品的在网时长);2、客户下移动号码数
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
KH_ONLINE_TIME NUMERIC(10) NULL --在网时长
,NBR_COUNT NUMERIC(10) NULL --移动号码数
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10.1:更新客户在网时长';
SET @START_TIME = NOW();
--获取客户在网时长
--汇总在用用户表,结果插入临时表
DROP TABLE IF EXISTS SD_TEMP_CUST_ONLINE_TIME;
SELECT CUST_ID,MAX(ONLINE_TIME) AS ONLINE_TIME
INTO SD_TEMP_CUST_ONLINE_TIME
FROM RPT_COMM_CM_SERV_2010
WHERE MONTH_ID = @MONTH_ID
GROUP BY CUST_ID;
COMMIT;
--更新客户在网时长
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.KH_ONLINE_TIME = B.ONLINE_TIME
FROM SD_TEMP_CUST_ONLINE_TIME AS B
WHERE A.CUST_ID = B.CUST_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 10.2:更新号码数';
SET @START_TIME = NOW();
--获取客户下移动号码数量,插入临时表
DROP TABLE IF EXISTS SD_TEMP_CUST_NBR_COUNT;
SELECT CUST_ID,COUNT(DISTINCT SERV_ID) AS NBR_COUNT
INTO SD_TEMP_CUST_NBR_COUNT
FROM SD_TEMP_CDMA_BASIC_INFO
WHERE PROD_ID IN (3204,3205)
GROUP BY CUST_ID;
COMMIT;
--更新号码数
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.NBR_COUNT = B.NBR_COUNT
FROM SD_TEMP_CUST_NBR_COUNT AS B
WHERE A.CUST_ID = B.CUST_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11:增加终端信息';
SET @START_TIME = NOW();
--增加终端信息
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD
(
BRAND VARCHAR(100) NULL, --本月在用终端
TERM_TYPE VARCHAR(60) NULL, --本月在用终端类型(1X,3G,4G)
TERM_DUR NUMERIC(10) NULL, --本月在用终端使用时长
TERM_PRICE NUMERIC(10) NULL, --本月在用终端价格
TERM_CNT NUMERIC(10) NULL, --该用户三年内使用终端数量
BRAND_LAST1 VARCHAR(100) NULL, --上个终端
TERM_TYPE_LAST1 VARCHAR(60) NULL, --上个终端类型
TERM_DUR_LAST1 NUMERIC(10) NULL, --上个终端类型使用时长
TERM_PRICE_LAST1 NUMERIC(10) NULL, --上个终端价格
BRAND_LAST2 VARCHAR(100) NULL, --上上个终端
TERM_TYPE_LAST2 VARCHAR(60) NULL, --上上个终端类型
TERM_DUR_LAST2 NUMERIC(10) NULL, --上上个终端类型使用时长
TERM_PRICE_LAST2 NUMERIC(10) NULL, --上上个终端价格
BRAND_LAST3 VARCHAR(100) NULL, --上上上个终端
TERM_TYPE_LAST3 VARCHAR(60) NULL, --上上上个终端类型
TERM_DUR_LAST3 NUMERIC(10) NULL, --上上上个终端类型使用时长
TERM_PRICE_LAST3 NUMERIC(10) NULL, --上上上个终端价格
PRE_PHONE_STRCODE VARCHAR(255) NULL, --上个月使用终端串号
PHONE_STRCODE VARCHAR(255) NULL, --本月使用终端串号
NEXT_PHONE_STRCODE VARCHAR(255) NULL, --下个月使用终端串号
IS_HJ INT NULL --本月是否换机
);
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.1:更新本月终端及串号';
SET @START_TIME = NOW();
--更新本月终端及串号
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND = B.BRAND,
A.TERM_TYPE = B.BRAND_TYPE,
A.PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.2:更新本月终端使用时长';
SET @START_TIME = NOW();
--更新本月终端使用时长,价格
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_DUR = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)
,A.TERM_PRICE = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B
WHERE A.SERV_ID = B.SERV_ID
AND A.ACC_NBR = B.ACC_NBR
AND A.PHONE_STRCODE = B.PHONE_STRCODE;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.3:更新本月终端价格';
SET @START_TIME = NOW();
--更新本月终端价格
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET BRAND = STR_REPLACE(BRAND ,' ','-') WHERE BRAND LIKE '% %' ;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_PRICE = B.TERMINAL_PRICE_0 -- ISNULL(A.ZD_BT_FEE,0)
FROM T_DX_JX_11 AS B
WHERE A.BRAND = B.TERMINAL_TYPE AND A.TERM_PRICE IS NULL;
COMMIT;
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_PRICE = B.TERMINAL_PRICE -- ISNULL(A.ZD_BT_FEE,0)
FROM T_DX_JX_11_1 AS B
WHERE A.BRAND = B.TERMINAL_TYPE AND A.TERM_PRICE IS NULL;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.4:获取上月终端';
SET @START_TIME = NOW();
--获取上月终端
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.PRE_PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @PRE_MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.5:获取下月终端';
SET @START_TIME = NOW();
--获取下月终端
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.NEXT_PHONE_STRCODE = B.PHONE_STRCODE
FROM V_RPT_TERMINAL_TYPE AS B
WHERE A.ACC_NBR = B.ACC_NBR
AND B.MONTH_ID = @NEXT_MONTH_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.6:更新IS_HJ';
SET @START_TIME = NOW();
--初始化IS_HJ字段
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 0;
COMMIT;
--更新IS_HJ(确认换机)
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 1
WHERE PRE_PHONE_STRCODE <> PHONE_STRCODE AND PHONE_STRCODE = NEXT_PHONE_STRCODE;
COMMIT;
--更新IS_HJ(未真正换机)
UPDATE SD_TEMP_CDMA_BASIC_INFO
SET IS_HJ = 2
WHERE PRE_PHONE_STRCODE <> PHONE_STRCODE AND PHONE_STRCODE <> NEXT_PHONE_STRCODE;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.7:更新TERM_CNT';
SET @START_TIME = NOW();
--创建临时表,获取近3个月终端使用个数
DROP TABLE IF EXISTS SD_TEMP_BUF_CDMA_TERM_CNT;
SELECT SERV_ID,COUNT(DISTINCT PHONE_STRCODE) CNT
INTO SD_TEMP_BUF_CDMA_TERM_CNT
FROM BUF_CMDA_TERMINAL_INFO
WHERE REGISTER_TIME <= @MONTH_LAST_DAY
AND REGISTER_TIME > DATEFORMAT(DATEADD(YY,-3,@MONTH_LAST_DAY),'YYYY-MM-DD')
GROUP BY SERV_ID;
COMMIT;
--更新TERM_CNT
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.TERM_CNT = B.CNT
FROM SD_TEMP_BUF_CDMA_TERM_CNT AS B
WHERE A.SERV_ID = B.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.8:创建临时表,获取用户本用终端排序序号';
SET @START_TIME = NOW();
--创建临时表,获取用户本用终端排序序号
DROP TABLE IF EXISTS SD_TEMP_BUF_CDMA_TERM_RANK;
SELECT A.SERV_ID,MIN(RANK_ID) RANK_ID
INTO SD_TEMP_BUF_CDMA_TERM_RANK
FROM BUF_CMDA_TERMINAL_INFO AS A,SD_TEMP_CDMA_BASIC_INFO AS B
WHERE A.REGISTER_TIME <= @MONTH_LAST_DAY
AND A.SERV_ID = B.SERV_ID
AND A.PHONE_STRCODE <> B.PHONE_STRCODE
GROUP BY A.SERV_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.9:更新上个终端信息,序号为上一步得到的最小序号+1';
SET @START_TIME = NOW();
--更新上个终端信息,序号为上一步得到的最小序号+1
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST1 = B.BRAND,
A.TERM_TYPE_LAST1 = B.BRAND_TYPE,
A.TERM_DUR_LAST1 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR,
A.TERM_PRICE_LAST1 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.10:更新上上个终端信息,序号为上一步得到的最小序号+2';
SET @START_TIME = NOW();
--更新上上个终端信息,序号为上一步得到的最小序号+2
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST2 = B.BRAND,
A.TERM_TYPE_LAST2 = B.BRAND_TYPE,
A.TERM_DUR_LAST2 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR - A.TERM_DUR_LAST1,
A.TERM_PRICE_LAST2 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID + 1;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 11.11:更新上上上个终端信息,序号为上一步得到的最小序号+3';
SET @START_TIME = NOW();
--更新上上上个终端信息,序号为上一步得到的最小序号+3
UPDATE SD_TEMP_CDMA_BASIC_INFO AS A
SET A.BRAND_LAST3 = B.BRAND,
A.TERM_TYPE_LAST3 = B.BRAND_TYPE,
A.TERM_DUR_LAST3 = DATEDIFF(MM,B.REGISTER_TIME,@MONTH_LAST_DAY)- A.TERM_DUR - A.TERM_DUR_LAST1 - A.TERM_DUR_LAST2,
A.TERM_PRICE_LAST3 = B.TERMINAL_PRICE
FROM BUF_CMDA_TERMINAL_INFO AS B,SD_TEMP_BUF_CDMA_TERM_RANK AS C
WHERE A.SERV_ID = B.SERV_ID
AND B.SERV_ID = C.SERV_ID
AND B.RANK_ID = C.RANK_ID + 2;
COMMIT;
--增加新终端价格字段,已经废弃,新增是为了保留结构一至
ALTER TABLE SD_TEMP_CDMA_BASIC_INFO ADD TERM_PRICE_NEW NUMERIC(10) NULL;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
SET @STEP_LOGS = 'STEP 12:重命名目标表';
SET @START_TIME = NOW();
SET @SCRIPT = 'ALTER TABLE SD_TEMP_CDMA_BASIC_INFO RENAME BUF_SERV_CDMA_BASIC_INFO_'||@MONTH_ID ||'';
EXECUTE IMMEDIATE @SCRIPT;
COMMIT;
TRUNCATE TABLE BUF_SERV_CDMA_BASIC_INFO;
SET @SCRIPT = 'INSERT INTO BUF_SERV_CDMA_BASIC_INFO SELECT * FROM BUF_SERV_CDMA_BASIC_INFO_'||@MONTH_ID ||'';
EXECUTE IMMEDIATE @SCRIPT;
COMMIT;
SET @ROW_CNT = @@ROWCOUNT;
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,1,SQLCODE,ERRORMSG());
EXCEPTION
WHEN OTHERS THEN
CALL P_PUB_ERROR_LOG(@OBJECT_NAME,@STEP_LOGS,@START_TIME,@ROW_CNT,-1,SQLCODE,ERRORMSG());
ROLLBACK;
END;
阅读全文
0 0
- sql 电信分析
- 联通、移动、电信分析
- 电信
- 电信经营分析系统中的上下文
- 电信运营商云计算发展战略分析
- 电信运营商云计算战略定位分析
- 电信计费业务规则案例分析
- 电信运营商云计算体系架构分析
- 电信运营商云计算体系架构分析
- 电信运营商移动互联网发展分析
- 浅论电信产业模块化经营分析
- 浅论电信产业模块化经营分析
- 某电信公司客户RFM模型分析
- 案例分析 - 电信网页访问监控原理分析
- 电信行业大数据实践走进大数据大赛:电信网络寻呼黑洞分析
- 数据仓库如何在电信网络资源分析系统中应用
- 电信计费帐务系统中-月租费计算程序分析
- 数据仓库如何在电信网络资源分析系统中应用
- Linux之sed命令详解
- 如何将IKAnalyzer添加到本地maven仓库
- JAVA面向对象1:类与对象
- 【linux 命令】权限
- 多态抽象
- sql 电信分析
- NYOJ:7-街区最短路径问题
- IDEA导入maven项目
- [LeetCode] 119. Pascal's Triangle II
- samson-wang/dcgan.caffe
- codeforces 755c 并查集+迷之题意....
- leetcode题解-160. Intersection of Two Linked Lists
- c#中的多态
- 223. Rectangle Area