CREATE PROCEDURE YSQKGKSBU_GZTH @FSDate NVARCHAR(100), @FEDate NVARCHAR(100) AS BEGIN DECLARE @SumDQJE DECIMAL(23,10) --定义变量 DECLARE @FEDateDate DATE; --判断@FEDate日期是否为空 IF @FEDate IS NULL OR @FEDate = '' BEGIN SET @FEDateDate = GETDATE(); END ELSE BEGIN -- 转换为日期类型 SET @FEDateDate = CONVERT(DATE, @FEDate); END -- 获取上一年的 12 月 31 日 SET @FEDateDate = DATEFROMPARTS(YEAR(@FEDateDate) - 1, 12, 31); --清空表里的数据 TRUNCATE TABLE YSQKGK_SBU_GZTH --查询到期时间为年初前的到期金额 SELECT [SBU],SUM([到期金额]) AS '到期金额' INTO #NCTEMP1 FROM ZRP_YingShouMingXi_yuyubo WHERE [到期时间] <= @FEDateDate GROUP BY [SBU] --插入到期时间为年初前的到期金额 INSERT INTO YSQKGK_SBU_GZTH([SBU],[年初到期应收款额]) SELECT [SBU],[到期金额] FROM #NCTEMP1 WHERE [到期金额] <> 0 --查询到期时间为年初前的到期金额,且收款人=应收款专责小组 SELECT [SBU],SUM([到期金额]) AS '到期金额' INTO #NCZZTEMP1 FROM ZRP_YingShouMingXi_yuyubo WHERE [到期时间] <= @FEDateDate AND [收款人] = '应收款专责小组' GROUP BY [SBU] --插入到期时间为年初前的到期金额,且收款人=应收款专责小组 INSERT INTO YSQKGK_SBU_GZTH([SBU],[其中_年初应收款专责小组]) SELECT [SBU],[到期金额] FROM #NCZZTEMP1 WHERE [到期金额] <> 0 --查询本年度到期时间的到期金额 SELECT [SBU],SUM([到期金额]) AS '到期金额' INTO #BNTEMP1 FROM ZRP_YingShouMingXi_yuyubo WHERE format([到期时间],'yyyy-MM-dd') >= @FSDate AND format([到期时间],'yyyy-MM-dd') <= @FEDate GROUP BY [SBU] --插入本年度到期时间的到期金额 INSERT INTO YSQKGK_SBU_GZTH([SBU],[本年到期应收款额]) SELECT [SBU],[到期金额] FROM #BNTEMP1 WHERE [到期金额] <> 0 --查询本年度到期时间的到期金额,其中收款人=应收款专责小组 SELECT [SBU],SUM([到期金额]) AS '到期金额' INTO #BNZZTEMP1 FROM ZRP_YingShouMingXi_yuyubo WHERE [到期时间] >= @FSDate AND [到期时间] <= @FEDate AND [收款人] = '应收款专责小组' GROUP BY [SBU] INSERT INTO YSQKGK_SBU_GZTH([SBU],[其中_年初应收款专责小组]) SELECT [SBU],[到期金额] FROM #BNZZTEMP1 WHERE [到期金额] <> 0 SELECT * INTO #TEMP1 FROM( SELECT [SBU], SUM([年初到期应收款额]) AS 年初到期应收款额, SUM([其中_年初应收款专责小组]) AS 其中_年初应收款专责小组, SUM([本年到期应收款额]) AS 本年到期应收款额, SUM([其中_本年应收款专责小组]) AS 其中_本年应收款专责小组 FROM YSQKGK_SBU_GZTH GROUP BY [SBU] )AS YS --清空表的数据 TRUNCATE TABLE YSQKGK_SBU_GZTH --重新插入数据 INSERT INTO YSQKGK_SBU_GZTH([SBU],[年初到期应收款额],[其中_年初应收款专责小组], [本年到期应收款额],[其中_本年应收款专责小组]) SELECT * FROM #TEMP1 --更新占比数据 SELECT @SumDQJE = SUM([本年到期应收款额]) FROM YSQKGK_SBU_GZTH UPDATE YSQKGK_SBU_GZTH SET [占比] = CONVERT(VARCHAR, CAST(([本年到期应收款额] / @SumDQJE) * 100 AS DECIMAL(10, 2))) + '%' --更新变化数据 UPDATE YSQKGK_SBU_GZTH SET [变化] = ISNULL([本年到期应收款额],0) - ISNULL([年初到期应收款额],0) DROP TABLE #NCTEMP1,#NCZZTEMP1,#BNTEMP1,#BNZZTEMP1,#TEMP1 END;