做报表时用到的一个存储过程

USE [ibcs_baotou_true]

GO

/****** Object:  StoredProcedure [dbo].[P_RP_BaoTouRemissionCountMonthBB]    Script Date: 04/15/2011 10:43:46 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/*《减免汇总月报表》中“本月减免”中的历史数据及“本年累计减免”中的数据应该分为本年数据和本年前数据。

《减免明细表》中“减免历史欠费”也应分为本年数据和本年前数据,目前的报表无法进行和财务的对账,

分开的目的就是为了和财务进行数据的核对*/

-- =============================================

-- Author:		[email protected]

-- Create date: <2009-12-3>

-- Description:	<包头市供水总公司XXXX年XX月减免汇总月报表(T26)>

--------Sample:EXEC P_RP_BaoTouRemissionCountMonthBB '201002','','','',1



ALTER procedure [dbo].[P_RP_BaoTouRemissionCountMonthBB](

@countDate varchar(20),--查询年月

@waterType varchar(20)='',--用水类别

@S_ST varchar(20)='',--站点,可复选用逗号隔开

@S_CID char(16)='',--用户代码

@flag int=1--分质用水标志位;0:分质;1:非分质

)

as

declare 

	 @sql varchar(3000)--临时sql变量

	,@NowMonth varchar(20)--当前账务年月

	,@JianMianTableName varchar(50)--ZW_JianMiann表

	,@JianMianZBTableName varchar(50)--ZW_JianMian_ZB表

	,@BiaoKaxxTableName VARCHAR(50) -- 表卡信息表名

	,@s_BeginDate varchar(100)--减免日期开始日期

	,@s_EndDate varchar(100)--减免日期结束日期

	,@condition varchar(1000)--拼接查询条件

	,@countYear varchar(50)

	,@countMonth varchar(50)

	,@exChange int--标志位

set @exChange=0

------------------------------------------------------------

set @countYear=substring(convert(char(8),@countDate,112),1,4)  --2011

set @countMonth=substring(convert(char(8),@countDate,112),5,2) --04



-------得到账务年月范围---------

select @s_BeginDate=convert(varchar(10),D_KaiShiRQ,112),

       @s_EndDate=convert(varchar(10),D_JieShuRQ,112)

from SYS_JieZhuanRZ where I_ZhangWuNY=@countDate

--

print @s_BeginDate

if @s_BeginDate is null

   set @exChange=1--return 0

--获取表名



print  @countDate

select @JianMianTableName='ZW_JianMian'

select @JianMianZBTableName='ZW_JianMian_ZB' 

select @BiaoKaxxTableName=dbo.F_GetTableName(@countDate,'KG_BiaoKaXX')

print @JianMianTableName

		------判断要用到的表中是否有不存在的

		IF(@JianMianTableName IS NULL)

			BEGIN

				set @exChange=1--RETURN 0

			END	

-----查询居民类别的简号

create table #TMPJMJH (I_JH INT ,I_TJH int)

	insert into #TMPJMJH

		select * from F_BaotouGetFenLeiJH(0)

-----查询企业类别的简号

create table #TMPQYJH (I_JH INT,I_TJH int )

	insert into #TMPQYJH

		select * from F_BaotouGetFenLeiJH(1)

		

CREATE TABLE #TMPJMJH1 (I_JH INT,S_FeiLeiMC varchar(50))

insert into #TMPJMJH1 select I_JH,S_FeiLeiMC from (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) JG_YongShuiFL 



declare @S_JH varchar(1000)--存放简号,用逗号隔开

declare @JH varchar(20)--存放游标轮循的简号值

set @S_JH=''

if @waterType<>''

	begin

			delete from #TMPJMJH1--清空表

			set @sql='SELECT distinct I_JH,S_FeiLeiMC   

			FROM (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) [JG_YongShuiFL] 

			where i_ancestor IN (SELECT ID FROM (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) JG_YongShuiFL  WHERE I_ANCESTOR =0) 

			AND S_FEILEIMC LIKE ''%'+@waterType+'%'' '

			print @sql	

			INSERT INTO #TMPJMJH1

			EXEC(@sql)

			---使用游标读取#TMPJMJH表中字段值

			declare JHCursor cursor for --声明游标

			select I_JH from #TMPJMJH1 

			open JHCursor --打开游标

			fetch next from JHCursor into @JH--使游标指向第一行

	--		print @JH

			while @@FETCH_STATUS=0

			begin

				set @S_JH=@S_JH+@JH+','

				fetch next from JHCursor into @JH			

			end

			close JHCursor--关闭游标

			deallocate JHCursor--释放游标占用的空间

	--        print @S_JH

			if @S_JH<>''

				set @S_JH=substring(@S_JH,1,len(@S_JH)-1)

		end

	----拼接查询条件

	print '11111'

	set @condition=' and a.S_CaoZuoY=''100233'''

	if @S_ST<>'' and @S_ST<>'00'

		set @condition=@condition+' and a.S_ST in('+@S_ST+')'

	if @S_CID<>''

		set @condition=@condition+' and a.S_CID='''+@S_CID+''''

	if @waterType<>'' and @S_JH<>''

		set @condition=@condition+' and a.I_JH in('+@S_JH+')'

		

	select * into #biaoka from kg_biaokaxx where 1=2

set @sql='

select *  from '+@BiaokaxxTableName+'  where I_JiHuiYSJJFS>=0 '

insert into #biaoka exec(@sql)



	--定义报表临时表1  本月临时报表

	create table #NowMonth(I_JH int,

	WaterType varchar(50),--用水分类

	CountDate varchar(50),

	BasicFee numeric(12, 2),--基本水费

	SecondFee numeric(12,2),--二级水费

	OverstepPlanFee numeric(12,2),--超计划水费

	LateFee numeric(12,2),--滞纳金

	SewageDisposeFee numeric(12,2),--污水处理费

	TotalAmount numeric(12,2),--合计本月总额

	------------------------

	BasicFee1 numeric(12, 2),--历史基本水费

	SecondFee1 numeric(12,2),--历史二级水费

	OverstepPlanFee1 numeric(12,2),--历史超计划水费

	LateFee1 numeric(12,2),--滞纳金

	SewageDisposeFee1 numeric(12,2),--污水处理费

	TotalAmount1 numeric(12,2),--合计历史总额

	TotalCount numeric(12,2),--合计总额

	)

	

	--定义报表临时表2 本年临时报表

	create table #ThisYear(I_JH int,

	WaterType varchar(50),--用水分类

	TotalBasicFee numeric(12, 2),--基本水费

	TotalSecondFee numeric(12,2),--二级水费

	TotalOverstepPlanFee numeric(12,2),--超计划水费

	TotalLateFee numeric(12,2),--滞纳金

	TotalSewageDisposeFee numeric(12,2),--污水处理费

	YearTotalAmount numeric(12,2),--合计总额

	CountDate varchar(50),

	

	)

print '33333'

------------分质、非分质

declare @con varchar(100)

		if @flag=0

			set @con=' and c.I_BiaoZhongL=3'

		else

			set @con=' and c.I_BiaoZhongL<>3'

			

			

		select * into #tmpJianMian from zw_jianmian where 1=2

		set @sql='

			select a.*

			from '+@JianMianTableName+' as a	

			left join '+@BiaoKaxxTableName+' as c on a.s_cid=c.s_cid

			where  (a.DL_CaoZuoRQ>='+@s_BeginDate+' and a.DL_CaoZuoRQ<='+@s_EndDate+')  and n_je>0

			and a.I_ChuLi in(4,16)  '+@con+@condition

		print @sql

		 insert into #tmpJianMian exec(@sql)

		 

if @exChange=0

	begin

	----------------本月统计临时表--------------------

	--基本水费

create table #tmpBasicFee(I_JH int,N_ZongJinE numeric(18,2))

			set @sql='select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE''  from 

			#tmpJianMian as a 

			left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

			where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB=0 and b.i_leixing=1

			and b.I_FeiYongDLBH=580 and (a.i_y*100+a.i_m)='+@countDate+'

			group by b.I_JH'

			insert into #tmpBasicFee exec(@sql)

			--二级水费

create table #tmpSecondFee(I_JH int,N_ZongJinE numeric(18,2))

			set @sql='select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE''   from 

			#tmpJianMian as a 

			left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

			where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB>0 and a.s_cid not in (select s_cid from #biaoka)

			and b.I_FeiYongDLBH=580 and b.i_leixing=1 and (a.i_y*100+a.i_m)='+@countDate+'

			group by b.I_JH'

			--print @sql

			insert into #tmpSecondFee exec(@sql)

			--超计划水费

			create table #tmpOverstepPlanFee(I_JH int,N_ZongJinE numeric(18,2))

			set @sql='select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE''   from 

			#tmpJianMian as a 

			left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

			where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB>0 and a.s_cid  in (select s_cid from #biaoka)

			and b.I_FeiYongDLBH=580 and b.i_leixing=1 and (a.i_y*100+a.i_m)='+@countDate+'

			group by b.I_JH'

			--print @sql

			insert into #tmpOverstepPlanFee exec(@sql)

			-----滞纳金

			--set @sql='select a.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE'' into ##tmpLateFee from 

			--#tmpJianMian as a 

			--left join '+@JianMianZBTableName+' as b on 

			--a.i_jianmianbh=b.i_jianmianbh 

			--where a.I_JLZT=0  

			--and b.I_JLZT=0'+@condition+' 

			--and (a.DL_CaoZuoRQ>='+@s_BeginDate+' and a.DL_CaoZuoRQ<='+@s_EndDate+') 

			--and a.I_ChuLi in(4,16) 

			--group by a.I_JH'

			----print @sql

			--exec(@sql)

			--污水处理费

			create table #tmpSewageDisposeFee(I_JH int,N_ZongJinE numeric(18,2))

			set @sql='select b.I_JH,sum(isnull(N_ZongJinE,0)) as ''N_ZongJinE''   from 

			#tmpJianMian as a 

			left join '+@JianMianZBTableName+' as b on 	a.i_jianmianbh=b.i_jianmianbh 

			where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB=0 and b.i_leixing=1

			and b.I_FeiYongDLBH=581 and (a.i_y*100+a.i_m)='+@countDate+'  group by b.I_JH' 

			--print @sql

			insert into #tmpSewageDisposeFee exec(@sql)

			------------------------------------

			select I_JH into #tmp3 from #tmpBasicFee  --本月基本水费

			select I_JH into #tmp4 from #tmpSecondFee --二级水费

			select I_JH into #tmp5 from #tmpOverstepPlanFee --超计划水费

			select I_JH into #tmp6 from #tmpSewageDisposeFee --污水处理费

			

            --------------本月水费所有表--------------------------------			

			create table #first(i_jh int,

			s_feileimc varchar(64)

			,BasicCost numeric(18,2),

			SecondLevelCost numeric(18,2),

			OverPlanCost numeric(18,2),

			LateFeeCost numeric(18,2),

			SlopsCost numeric(18,2),

			AllCost numeric(18,2), 

			YM varchar(16))

			--------------合并本月水费所有表-----------------

			insert into #first

			select T.I_JH,F.S_FeiLeiMC,

			isnull(A.N_ZongJinE,0) as 'BasicFee',

			isnull(B.N_ZongJinE,0) as 'SecondFee',

			isnull(C.N_ZongJinE,0) as 'OverstepPlanFee',

			0 as 'LateFee',

			isnull(D.N_ZongJinE,0) as 'SewageDisposeFee',

			isnull(A.N_ZongJinE,0)+isnull(B.N_ZongJinE,0)+isnull(C.N_ZongJinE,0)+isnull(D.N_ZongJinE,0)

			as 'TotalAmount',

			@countYear+'年'+@countMonth+'月' as CountDate

			from 

			(select I_JH from #tmp3 union select I_JH from #tmp4 union 

			select I_JH from #tmp5 union select I_JH from #tmp6) T

			left join #tmpBasicFee A on T.I_JH=A.I_JH

			left join #tmpSecondFee B on T.I_JH=B.I_JH

			left join #tmpOverstepPlanFee C on T.I_JH=C.I_JH

			left join #tmpSewageDisposeFee D on T.I_JH=D.I_JH 

			--left join ##tmpLateFee E on T.I_JH=E.I_JH 

			left join #TMPJMJH1 F on T.I_JH=F.I_JH

	end

-------------------------------------------------------------------------------------------------------------------------------------------



----------减免历史基本水费、减免污水处理费---------

create table #lsBasicSlops(I_JH int,BasicCost numeric(18,2))

SET @SQL='SELECT t.*

FROM(

SELECT b.I_JH,SUM(b.N_ZongJinE) AS BasicCost 

FROM #tmpJianMian AS a

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB=0 and b.i_leixing=1

 and (a.i_y*100+a.i_m)<'+@countDate+' GROUP BY b.I_JH) t'

print @sql                                         

insert into #lsBasicSlops EXEC(@SQL)

--污水费

create table #lsSlops(I_JH int,SlopsCost numeric(18,2))

SET @SQL='SELECT t1.*



FROM (

SELECT b.I_JH,SUM(b.N_ZongJinE) AS SlopsCost 

FROM #tmpJianMian AS a

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=581 AND b.I_JIETIJB=0 and b.i_leixing=1

 and (a.i_y*100+a.i_m)<'+@countDate+'	GROUP BY b.I_JH

)  t1'

print @sql

insert into #lsSlops EXEC(@SQL)

----------减免历史二级水费---------------------

create table #lsSecondLevel(I_JH int,SecondLevelCost numeric(18,2))

SET @SQL='SELECT b.I_JH,SUM(b.N_ZongJinE) AS SecondLevelCost 



FROM  #tmpJianMian AS a 

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB>0 and b.i_leixing=1

 and (a.i_y*100+a.i_m)<'+@countDate+' and a.s_cid not in (select s_cid from #biaoka)

	GROUP BY b.I_JH'

insert into #lsSecondLevel EXEC(@SQL)

----------减免历史超计划水费-------------------

create table #lsOverPlan(I_JH int,OverPlanCost numeric(18,2))

SET @SQL='SELECT b.I_JH,SUM(b.N_ZongJinE) AS OverPlanCost 

FROM  #tmpJianMian AS a 

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB>0 and b.i_leixing=1

 and (a.i_y*100+a.i_m)<'+@countDate+' and a.s_cid  in (select s_cid from #biaoka)

	GROUP BY b.I_JH'

insert into #lsOverPlan EXEC(@SQL)



--------------------创建历史水费所有表

create table #second(

				i_jh int,

				s_feileimc varchar(64),

				BasicCost numeric(18,2),

				SecondLevelCost numeric(18,2),

				OverPlanCost numeric(18,2),

				LateFeeCost numeric(18,2),

				SlopsCost numeric(18,2),

				AllCost numeric(18,2), 

				YM varchar(16))



-----------------合并历史所有表-------------------

select distinct i_jh into #lsjh from #lsBasicSlops 

union select i_jh  from #lsSecondLevel

union select i_jh  from #lsOverPlan 

union select i_jh  from #lsSlops 



insert into #second SELECT DISTINCT t.i_jh,S_FeiLeiMC

,isnull(a.BasicCost,0) as BasicCost

,isnull(b.SecondLevelCost,0) as SecondLevelCost

,isnull(c.OverPlanCost,0) as OverPlanCost

,0 AS LateFeeCost

,isnull(e.SlopsCost,0) as SlopsCost

,ISNULL(a.BasicCost,0)+ISNULL(e.SlopsCost,0)+ISNULL(b.SecondLevelCost,0)+ISNULL(c.OverPlanCost,0) AS AllCost

, @countYear+'年'+@countMonth+'月' as CountDate

FROM   #lsjh  AS t

LEFT JOIN #lsBasicSlops AS a ON  t.I_JH=a.I_JH

LEFT JOIN #lsSecondLevel AS b ON t.I_JH=b.I_JH

LEFT JOIN #lsOverPlan AS c ON  t.I_JH=c.I_JH

LEFT JOIN #lsSlops AS e ON  t.I_JH=e.I_JH

LEFT JOIN (select * from JG_YongShuiFL where 

i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) JG_YongShuiFL ON t.I_JH=JG_YongShuiFL.I_JH





--#secon 历史水费所有表  #first本月水费所有表 #NowMonth 本月临时表(包含历史和非历史所有) #ThisYear 本年临时表 不含历史

-------------------------------------------------------------------------------------------------------------------------------------------





---本月临时统计

select distinct i_jh,S_FeiLeiMC,YM  into #he from #first 

union select i_jh,S_FeiLeiMC,YM from #second



insert into #NowMonth

select a.i_jh,a.S_FeiLeiMC,a.YM,

isnull(b.BasicCost,0) as BasicCost ,

isnull(b.SecondLevelCost,0) as SecondLevelCost,

isnull(b.OverPlanCost,0) as OverPlanCost,

isnull(b.LateFeeCost,0) as LateFeeCost ,

isnull(b.SlopsCost,0) as SlopsCost,

isnull(b.AllCost,0) as AllCost, --本月合计



isnull(c.BasicCost,0) as BasicCost1,

isnull(c.SecondLevelCost,0) as SecondLevelCost1,--历史二级水费

isnull(c.OverPlanCost,0) as OverPlanCost1,--历史超计划水费

isnull(c.LateFeeCost,0) as LateFeeCost1,

isnull(c.SlopsCost,0) as SlopsCost1,

isnull(c.AllCost,0) as AllCost1, --本月历史减免合计



isnull(b.AllCost,0)+isnull(c.AllCost,0) as Allcount

from #he as a

left join #first as b on a.i_jh=b.i_jh

left join #second as c on a.i_jh=c.i_jh





---------------------本年统计临时表------------------

declare @year varchar(10),--当前时间的年份

		@m int,--月份循环变量

		@month int,--当前时间的月份

	    @tmpYearM varchar(50),--循环使用账务年月

        @s_StartDate varchar(50),

        @I_EndDate varchar(50)

set @year=convert(char(4),@countDate,112)

set @month=cast(substring(convert(char(8),@countDate,112),5,2) as int)  --获取当前输入日期的月份

set @m=1

--print @month

-------------------------------------------------

---创建基本水费临时表

create table #tmpBasicFee1(I_JH int,N_ZongJinE numeric(12,2))

---创建二级水费临时表

create table #tmpSecondFee1(I_JH int,N_ZongJinE numeric(12,2))

---创建超计划水费临时表

create table #tmpOverstepPlanFee1(I_JH int,N_ZongJinE numeric(12,2))

---创建污水处理费临时表

create table #tmpSewageDisposeFee1(I_JH int,N_ZongJinE numeric(12,2))

---创建滞纳金临时表

--create table #tmpLateFee1(I_JH int,N_ZongJinE numeric(12,2))







----------减免历史污水费

create table #ylsSlops(I_JH int,SlopsCost numeric(18,2))

----------减免历史基本水费

create table #ylsBasicSlops(I_JH int,BasicCost numeric(18,2))

----------减免历史二级水费

create table #ylsSecondLevel(I_JH int,SecondLevelCost numeric(18,2))

----------减免历史超计划水费

create table #ylsOverPlan(I_JH int,OverPlanCost numeric(18,2))





---while循环遍历从1月到当前月的各种费用

while @m<=@month  --Condition here must be int or some type inherits int

	begin

		if len(@m)=1

			set @tmpYearM=@year+'0'+cast(@m as varchar(5))

		else

			set @tmpYearM=@year+cast(@m as varchar(5))

		print @tmpYearM

		-------得到账务年月范围---------

		select @s_StartDate=convert(varchar(8),D_KaiShiRQ,112),

			   @I_EndDate=convert(varchar(8),D_JieShuRQ,112)

		from SYS_JieZhuanRZ where I_ZhangWuNY=@tmpYearM

        print @s_StartDate

		--

		if @s_StartDate is null

			begin

			   set @m=@m+1

			   print @m

			   continue--重新开始循环

			end

	--得到当前账务年月

	select @NowMonth=max(I_ZhangWuNY) from SYS_JieZhuanRZ

			set @JianMianTableName='ZW_JianMian'

			set @JianMianZBTableName='ZW_JianMian_ZB'	

select @BiaoKaxxTableName=dbo.F_GetTableName(@tmpYearM,'KG_BiaoKaXX')



	   delete from #tmpJianMian

			set @sql='

			select a.*

			from '+@JianMianTableName+' as a	

			left join '+@BiaoKaxxTableName+' as c on a.s_cid=c.s_cid

			where  (a.DL_CaoZuoRQ>='+@s_StartDate+' and a.DL_CaoZuoRQ<='+@I_EndDate+')  and n_je>0

			and a.I_ChuLi in(4,16)  and (a.i_y*100+a.i_m)<='+@tmpYearM+@con+@condition

		insert into #tmpJianMian exec(@sql)

		--

		delete from #biaoka

		   set @sql='

		   select *  from '+@BiaokaxxTableName+'  where I_JiHuiYSJJFS>=0 ' 

		insert into #biaoka exec(@sql)







		---基本水费

		set @sql='insert into #tmpBasicFee1 

		select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE'' from 

		#tmpJianMian as a 

		left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

		where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB=0  and b.i_leixing=1 

		and b.I_FeiYongDLBH=580 group by b.I_JH'

		print @sql

		exec(@sql)

print @s_BeginDate

		--合计本年二级水费

		set @sql='insert into #tmpSecondFee1 

		select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE'' from 

		#tmpJianMian as a 

		left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

		where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB>0 and b.i_leixing=1 and a.s_cid not in (select s_cid from #biaoka)

		and b.I_FeiYongDLBH=580 group by b.I_JH'

--		print @sql

		exec(@sql)

		--合计超计划水费

		set @sql='insert into #tmpOverstepPlanFee1 

		select b.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE'' from 

		#tmpJianMian as a 

		left join '+@JianMianZBTableName+' as b on a.i_jianmianbh=b.i_jianmianbh 

		where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB>0 and b.i_leixing=1 and a.s_cid  in (select s_cid from #biaoka)

		and b.I_FeiYongDLBH=580 group by b.I_JH'

--		print @sql

		exec(@sql)

--		---滞纳金

--		set @sql='insert into #tmpLateFee1 

--		select a.I_JH,sum(b.N_ZongJinE) ''N_ZongJinE'' from 

--		#tmpJianMian as a 

--		left join '+@JianMianZBTableName+' as b on 

--		a.i_jianmianbh=b.i_jianmianbh 

--		where a.I_JLZT=0  

--		and b.I_JLZT=0'+@condition+' 

--		and (a.DL_CaoZuoRQ>='+@s_BeginDate+' and a.DL_CaoZuoRQ<='+@s_EndDate+') 

--		and a.I_ChuLi in(4,16) group by a.I_JH'

----		print @sql

--		exec(@sql)

		--合计污水处理费

		set @sql='insert into #tmpSewageDisposeFee1 

		select b.I_JH,sum(isnull(b.N_ZongJinE,0)) as  ''N_ZongJinE'' from 

		#tmpJianMian as a 

		left join '+@JianMianZBTableName+' as b on 

		a.i_jianmianbh=b.i_jianmianbh 

		where a.I_JLZT=0 and b.I_JLZT=0 and b.I_JieTiJB=0 and b.i_leixing=1 

		and b.I_FeiYongDLBH=581  group by b.I_JH'

--		print @sql



		exec(@sql)

----------------------------------------------------------历史减免--------------------------------------------------------



SET @SQL='insert into #ylsBasicSlops SELECT t.*

FROM(

SELECT b.I_JH,SUM(b.N_ZongJinE) AS BasicCost 

FROM #tmpJianMian AS a

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB=0 and b.i_leixing=1 GROUP BY b.I_JH) t'

EXEC(@SQL) print @sql



SET @SQL='insert into #ylsSlops SELECT t1.*

FROM (

SELECT b.I_JH,SUM(b.N_ZongJinE) AS SlopsCost 

FROM #tmpJianMian AS a

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=581 AND b.I_JIETIJB=0 and b.i_leixing=1

GROUP BY b.I_JH

)  t1'

EXEC(@SQL) print @sql



SET @SQL='insert into #ylsSecondLevel SELECT b.I_JH,SUM(b.N_ZongJinE) AS SecondLevelCost 

FROM  #tmpJianMian AS a 

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB>0 and b.i_leixing=1

and a.s_cid not in (select s_cid from #biaoka)GROUP BY b.I_JH'

EXEC(@SQL) print @sql



SET @SQL='insert into #ylsOverPlan SELECT b.I_JH,SUM(b.N_ZongJinE) AS OverPlanCost 

FROM  #tmpJianMian AS a 

LEFT JOIN '+@JianMianZBTableName+' AS b ON a.i_jianmianbh=b.i_jianmianbh

WHERE a.I_JLZT=0 and b.I_JLZT=0 AND b.I_FeiYongDLBH=580 AND b.I_JIETIJB>0 and b.i_leixing=1

and a.s_cid  in (select s_cid from #biaoka) GROUP BY b.I_JH'

EXEC(@SQL) print @sql

--------------------------------------------------------结束历史减免统计------------------------------------------------------





        ----------------改变循环控制变量-----------

		set @m=@m+1

end

--------------------创建历史水费所有表

create table #ysecond(

				i_jh int,

				--s_feileimc varchar(64),

				BasicCost numeric(18,2),

				SecondLevelCost numeric(18,2),

				OverPlanCost numeric(18,2),

				LateFeeCost numeric(18,2),

				SlopsCost numeric(18,2),

				AllCost numeric(18,2), 

				YM varchar(16))



-----------------合并历史所有表-------------------

select distinct i_jh into #ylsjh from #ylsBasicSlops 

union select i_jh  from #ylsSecondLevel

union select i_jh  from #ylsOverPlan 

union select i_jh  from #ylsSlops 



insert into #ysecond SELECT DISTINCT t.i_jh

--,S_FeiLeiMC

,isnull(a.BasicCost,0) as BasicCost

,isnull(b.SecondLevelCost,0) as SecondLevelCost

,isnull(c.OverPlanCost,0) as OverPlanCost

,0 AS LateFeeCost

,isnull(e.SlopsCost,0) as SlopsCost

,ISNULL(a.BasicCost,0)+ISNULL(e.SlopsCost,0)+ISNULL(b.SecondLevelCost,0)+ISNULL(c.OverPlanCost,0) AS AllCost

, @countYear+'年'+@countMonth+'月' as CountDate

FROM #ylsjh  AS t

LEFT JOIN #ylsBasicSlops AS a ON  t.I_JH=a.I_JH

LEFT JOIN #ylsSecondLevel AS b ON t.I_JH=b.I_JH

LEFT JOIN #ylsOverPlan AS c ON  t.I_JH=c.I_JH

LEFT JOIN #ylsSlops AS e ON  t.I_JH=e.I_JH 

LEFT JOIN (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) JG_YongShuiFL ON t.I_JH=JG_YongShuiFL.I_JH



--创建临时表 保存 #ysecond中部分内容

create table #tmpsec(	

	i_jh int,

	yBasicCost numeric(18,2),

	ySecondLevelCost numeric(18,2),

	yOverPlanCost numeric(18,2),

	yLateFeeCost numeric(18,2),

	ySlopsCost numeric(18,2))



insert into #tmpsec

select i_jh, sum(BasicCost),sum(SecondLevelCost),sum(OverPlanCost),sum(LateFeeCost),sum(SlopsCost) from #ysecond group by i_jh

print 'ssssssss'

------------------------------------------------结束历史所有表----------------------------------------------------------------

    select I_JH,sum(N_ZongJinE) 'N_ZongJinE' into #tmpBasic 

		from #tmpBasicFee1 group by I_JH

	

	select I_JH,sum(N_ZongJinE) 'N_ZongJinE' into #tmpSecond 

		from #tmpSecondFee1 group by I_JH

	select I_JH,sum(N_ZongJinE) 'N_ZongJinE' into #tmpOverstepPlan 

		from #tmpOverstepPlanFee1 group by I_JH

	select I_JH,sum(N_ZongJinE) 'N_ZongJinE' into #tmpSewageDispose 

		from #tmpSewageDisposeFee1 group by I_JH

	

--	select I_JH,sum(N_ZongJinE) 'N_ZongJinE' into #tmpLate 

--		from #tmpLateFee1 group by I_JH

	select I_JH into #tmp31 from #tmpBasic

	select I_JH into #tmp41 from #tmpSecond

	select I_JH into #tmp51 from #tmpOverstepPlan

	select I_JH into #tmp61 from #tmpSewageDispose

--    select I_JH into #tmp71 from #tmpLate

	-----------------------年统计---------------------------

	insert into #ThisYear

	select T.I_JH,F.S_FeiLeiMC,--用水分类

	isnull(A.N_ZongJinE,0) as 'TotalBasicFee', --基本水费

	isnull(B.N_ZongJinE,0) as 'TotalSecondFee', --二级水费

	isnull(C.N_ZongJinE,0) as 'TotalOverstepPlanFee',--超计划水费

	0 as 'TotalLateFee',  ---滞纳金

	isnull(D.N_ZongJinE,0) as 'TotalSewageDisposeFee',--污水处理费

	isnull(A.N_ZongJinE,0)+isnull(B.N_ZongJinE,0)+isnull(C.N_ZongJinE,0)+isnull(D.N_ZongJinE,0) 

	as 'YearTotalAmount', --本年合计减免

	@countYear+'年'+@countMonth+'月' as CountDate

	from (

	select I_JH from #tmp31 

	union 

	select I_JH from #tmp41 

	union 

	select I_JH from #tmp51 

	union 

	select I_JH from #tmp61

	)T

	left join #tmpBasic A on T.I_JH=A.I_JH

	left join #tmpSecond B on T.I_JH=B.I_JH

	left join #tmpOverstepPlan C on T.I_JH=C.I_JH

	left join #tmpSewageDispose D on T.I_JH=D.I_JH 

	left join #TMPJMJH1 F on T.I_JH=F.I_JH

	left join #ysecond G on T.I_JH=G.I_JH

	

--  left join #tmpLate E on T.I_JH=E.I_JH

	----------------------------------------------



    select  distinct i_jh,CountDate,WaterType into  #jh  from #NowMonth 

    union 

    select i_jh,CountDate,WaterType from #ThisYear



---------------------------------------------------------------------------------------

if @exChange=0

	begin

		select  distinct

		f.s_feileimc as s_daleimc,   --用户类别

		t. CountDate,  --统计年月

		t.WaterType,  --用水类别

		isnull(a.BasicFee,0) 'BasicFee',  --本月基本水费

		isnull(a.SecondFee,0) 'SecondFee', --本月二级水费

		isnull(a.OverstepPlanFee,0) 'OverstepPlanFee',--本月超计划水费

		isnull(a.LateFee,0) 'LateFee',  --本月滞纳金

		isnull(a.SewageDisposeFee,0) 'SewageDisposeFee', --本月污水处理费

		isnull(a.TotalAmount,0) 'TotalAmount',  --本月合计

		

		

		isnull(a.BasicFee1,0) 'BasicFee1',  --历史基本水费

		isnull(a.SecondFee1,0) 'SecondFee1', --历史二级水费

		isnull(a.OverstepPlanFee1,0) 'OverstepPlanFee1',--历史超计划水费

		isnull(a.LateFee1,0) 'LateFee1', --历史滞纳金

		isnull(a.SewageDisposeFee1,0) 'SewageDisposeFee1', --历史污水处理费

		isnull(a.TotalAmount1,0) 'TotalAmount1', --历史合计

		

		isnull(a.TotalCount,0) as TotalCount, --减免合计

		

		

		b.TotalBasicFee,   --基本水费

		b.TotalSecondFee,  --二级水费

		b.TotalOverstepPlanFee, --超计划水费

		b.TotalLateFee, --滞纳金

		b.TotalSewageDisposeFee, --污水处理费

		------------

		c.yBasicCost, 

		c.ySecondLevelCost,

		c.yOverPlanCost,

		c.yLateFeeCost,

		isnull(c.ySlopsCost,0) 'ySlopsCost',

		--0 as SlopsCost,

		--c.AllCost ,

	    ISNULL(c.yBasicCost,0)+ISNULL(c.ySecondLevelCost,0)+ISNULL(c.yLateFeeCost,0)+ISNULL(c.yLateFeeCost,0)+ISNULL(c.ySlopsCost,0) AS AllCost,

		----------------------

		b.YearTotalAmount --合计

		from #jh as t 

		left join #NowMonth as a on t.i_jh=a.i_jh

		left join #ThisYear as b on t.I_JH=b.I_JH

		left join #tmpsec as c on  t.I_JH=c.I_JH

		left JOIN (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) JG_YongShuiFL ON t.I_JH=					JG_YongShuiFL.I_JH

		left join (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) f on JG_YongShuiFL.I_ANCESTOR=f.ID

	end

else

	begin

		select distinct f.s_feileimc as s_daleimc ,

		b.WaterType,

		a.*,

		b.CountDate,

		b.TotalBasicFee,

		b.TotalSecondFee,

		b.TotalOverstepPlanFee,

		b.TotalLateFee,

		b.TotalSewageDisposeFee,

		----------------

	    c.yBasicCost as 'yBasicCost',

		c.ySecondLevelCost as'ySecondLevelCost',

		c.yOverPlanCost as'yOverPlanCost',

		c.yLateFeeCost as 'yLateFeeCost',

		c.ySlopsCost as 'ySlopsCost',

		--0 as SlopsCost,

		--c.AllCost,

		ISNULL(c.yBasicCost,0)+ISNULL(c.ySecondLevelCost,0)+ISNULL(c.yLateFeeCost,0)+ISNULL(c.yLateFeeCost,0)+ISNULL(c.ySlopsCost,0) AS AllCost,

		

		b.YearTotalAmount

		from #NowMonth as a right join #ThisYear as b on a.I_JH=b.I_JH right join #tmpsec as c on  b.I_JH=c.I_JH

		LEFT JOIN (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia ))JG_YongShuiFL ON b.I_JH=JG_YongShuiFL.I_JH

	left join (select * from JG_YongShuiFL where i_tiaojiah=(select max(i_tiaojiah) from jg_tiaojia )) f on JG_YongShuiFL.I_ANCESTOR=f.ID

	end

	

	drop table #NowMonth

    drop table #ThisYear

	drop table #tmpJianMian

你可能感兴趣的:(存储过程)