USE zhengzhou_lishuangshuang GO /* EXEC PUpdateReportMapping 'MemberReport20','PRptMemberReport20','运转顾客分析表' INSERT TFunction(FName,FDisplayName,FTypeName,FParentName,FGroupName,FCategory,FVisible,FOrder) SELECT 'RMemberReport20','运转顾客分析表','','','MRReport',2,1,2 INSERT TFunctionAccessDict(FFunctionName,FAccessKey,FDefaultValue) SELECT 'RMemberReport20' ,'Basically',1 INSERT TRoleAccess(FId,FRoleId,FType,FFunctionName,FAccessKey,FValue) SELECT dbo.FNNewId(),B.FId,2 AS FType,'RMemberReport20','Basically',1 FROM TRole AS B WHERE B.FId > 1 */ IF object_id('dbo.PRptMemberReport20','P') IS NOT NULL BEGIN DROP PROCEDURE dbo.PRptMemberReport20 END GO CREATE PROCEDURE dbo.PRptMemberReport20 ( @Param VARCHAR(100) ) AS BEGIN DECLARE @FromMonth CHAR(10) DECLARE @ToMonth CHAR(10) DECLARE @CompNo VARCHAR(1000) --会员门店 DECLARE @LevelId BIGINT SELECT @LevelId = ISNULL(dbo.FNGetParamValue(@Param,'Level'),0) SELECT @FromMonth = ISNULL(dbo.FNGetParamValue(@Param,'FromMonth'),'') SELECT @ToMonth = ISNULL(dbo.FNGetParamValue(@Param,'ToMonth'),'') SELECT @CompNo = ISNULL(dbo.FNGetParamValue(@Param,'CompNo'),'') CREATE TABLE #Company ( FCompId BIGINT, FCompNo VARCHAR(50), FCompName VARCHAR(50) ) INSERT #Company(FCompId,FCOmpNo,FCompName) SELECT FId,FNo,FAbbr FROM TCompany WHERE FNo IN(SELECT Field FROM dbo.FNStrSplit(@CompNo)) CREATE TABLE #Result ( CompId BIGINT, MemId BIGINT, MemName VARCHAR(100), MemNo VARCHAR(50), Mobile VARCHAR(21), CreateDate VARCHAR(10), StateDesc VARCHAR(50), EmpId14001 BIGINT NOT NULL DEFAULT 0, EmpId14002 BIGINT NOT NULL DEFAULT 0, EmpId14003 BIGINT NOT NULL DEFAULT 0, EmpId14004 BIGINT NOT NULL DEFAULT 0, EmpName14001 VARCHAR(100) NOT NULL DEFAULT '' , EmpName14002 VARCHAR(100) NOT NULL DEFAULT '', EmpName14003 VARCHAR(100) NOT NULL DEFAULT '', EmpName14004 VARCHAR(100) NOT NULL DEFAULT '', ) INSERT #Result(MemId,CompId,MemName,MemNo,Mobile,CreateDate,StateDesc) SELECT M.FMemId,M.FCompId,M.FName,M.FMemNo,M.FMobilePhone,CONVERT(VARCHAR, M.FCreateDate,23),'' FROM TMember AS M INNER JOIN #Company AS C ON C.FCompId = M.FCompId WHERE M.FState = 1 AND M.FIsVisitor = 0 UPDATE A SET A.EmpId14001 = CASE WHEN B.FWorkType = 14001 THEN B.FEmpId ELSE EmpId14001 END, A.EmpId14002 = CASE WHEN B.FWorkType = 14002 THEN B.FEmpId ELSE EmpId14002 END, A.EmpId14003 = CASE WHEN B.FWorkType = 14003 THEN B.FEmpId ELSE EmpId14003 END, A.EmpId14004 = CASE WHEN B.FWorkType = 14004 THEN B.FEmpId ELSE EmpId14004 END --A.FEmpName14001 = E.FName FROM #Result AS A,TMemberEmployee AS B WHERE A.MemId = B.FMemId AND B.FWorkKey = 'RegWorkType' UPDATE A SET A.EmpName14001 = B.FName FROM #Result AS A,TEmployee AS B WHERE B.FId = A.EmpId14001 AND A.EmpId14001 != 0 UPDATE A SET A.EmpName14002 = B.FName FROM #Result AS A,TEmployee AS B WHERE B.FId = A.EmpId14002 AND A.EmpId14002 != 0 UPDATE A SET A.EmpName14003 = B.FName FROM #Result AS A,TEmployee AS B WHERE B.FId = A.EmpId14003 AND A.EmpId14003 != 0 UPDATE A SET A.EmpName14004 = B.FName FROM #Result AS A,TEmployee AS B WHERE B.FId = A.EmpId14004 AND A.EmpId14004 != 0 SELECT FMemId AS MemId, SUM(1) AS Times ,Month INTO #Data FROM ( select FMemId,1 AS Times,LEFT(CONVERT(varchar(100), FTime, 112),6) AS Month from TMemberTransHist GROUP BY FMemId,FTransId,LEFT(CONVERT(varchar(100), FTime, 112),6) ) AS A GROUP BY FMemId,Month DECLARE @BeginDate DATETIME DECLARE @EndDate DATETIME SET @BeginDate = @FromMonth + '-01' SET @EndDate = CONVERT(VARCHAR, DATEADD(MONTH,1,DATEADD(DAY,-1,@ToMonth + '-01')) ,23) DECLARE @Count INT SELECT @Count = 0; DECLARE @StateWhere1 VARCHAR(1000) DECLARE @StateWhere2 VARCHAR(1000) DECLARE @StateWhere3 VARCHAR(1000) DECLARE @StateWhere4 VARCHAR(1000) SELECT @StateWhere1 = '' SELECT @StateWhere2 = '' SELECT @StateWhere3 = '' SELECT @StateWhere4 = '' WHILE @EndDate >= @BeginDate BEGIN DECLARE @Sql VARCHAR(1000) DECLARE @ColName VARCHAR(50) DECLARE @Month VARCHAR(10) SELECT @Month = LEFT(CONVERT(varchar(100), @EndDate, 112),6); SELECT @ColName = 'Month' +@Month SELECT @Sql = ' ALTER TABLE #Result ADD ' + @ColName + ' VARCHAR(10) NOT NULL DEFAULT ''''' EXEC (@Sql ) SELECT @Sql = ' UPDATE A SET A.' + @ColName + ' = B.Times FROM #Result AS A,#Data AS B ' + ' WHERE A.MemId = B.MemId AND B.Month = ''' + @Month + ''' AND B.Times != 0' ; print @Sql EXEC (@Sql ) SELECT @StateWhere1 = @StateWhere1 + ' AND ' + @ColName + ' != 0 ' SELECT @StateWhere2 = @StateWhere2 + ' AND ' + @ColName + ' = 0 ' SELECT @StateWhere3 = @StateWhere3 + ' AND ' + @ColName + ' = 0 ' SELECT @StateWhere4 = @StateWhere4 + ' AND ' + @ColName + ' = 0 ' SET @Count = @Count + 1; IF @Count = 3 BEGIN print '' --3个月连续来的 SELECT @Sql = ' UPDATE #Result SET StateDesc = ''常来客'' WHERE 1=1 '+ @StateWhere1; EXEC (@Sql ) --3个月连续不来的 SELECT @Sql = ' UPDATE #Result SET StateDesc = ''警报客'' WHERE 1=1 '+ @StateWhere2; EXEC (@Sql ) END ELSE IF @Count = 6 BEGIN SELECT @Sql = ' UPDATE #Result SET StateDesc = ''流失客'' WHERE 1=1 '+ @StateWhere3; EXEC (@Sql ) END ELSE IF @Count = 12 BEGIN SELECT @Sql = ' UPDATE #Result SET StateDesc = ''死客'' WHERE 1=1 '+ @StateWhere4; EXEC (@Sql ) END SET @EndDate = DATEADD(MONTH,-1,@EndDate) END SET @EndDate = CONVERT(VARCHAR, DATEADD(MONTH,1,DATEADD(DAY,-1,@ToMonth + '-01')) ,23) SELECT M.*,C.FCompName AS CompName FROM #Result AS M INNER JOIN #Company AS C ON C.FCompId = M.CompId ORDER BY C.FCompNo ASC,M.MemNo ASC END GO EXEC PRptMemberReport20 'CompNo="001,002"FromMonth="2017-01"ToMonth="2017-05"'