IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetInsAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetInsAccount]
GO

-- =============================================
-- exec [GetInsAccount] 1,'2011','4','','','','0','0','','1','1','1',''
-- exec [GetInsAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetInsAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetInsAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气监测点存储过程,>
-- =============================================
CREATE proc [dbo].[GetInsAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null)  '
set @temppjtype='污染物浓度是否达标'
set @temptimewhere=''

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
set @sSQL='
with cte as
(
	select 监测年,季度,次数,行业,行业编码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
		on substring(b.行业代码,1,2)=c.行业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,行业,行业编码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(	
	select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,行业,行业编码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,行业,行业编码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率 
			from cte group by 监测年,季度,次数,行业,行业编码,企业代码
		) a group by 监测年,季度,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码 
) as a left join
(
	select 监测年 as 年度,季度,行业编码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,行业编码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,行业编码,企业代码
	) as a group by 监测年,季度,行业编码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'

end
if(@type=2)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
		on substring(b.行政区代码,1,4)+''00''=d.市代码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,市,省代码,市代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
		) a group by 监测年,季度,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码+''/''+市代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,市代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,市代码,企业代码
	) as a group by 监测年,季度,省代码,市代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=4)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,省代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,省代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,省代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,省代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,省代码,企业代码
		) a group by 监测年,季度,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,企业代码
	) as a group by 监测年,季度,省代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=6)--专题区域
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
		on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,专题区域,区域代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,专题区域,区域代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,专题区域,区域代码,企业代码
		) a group by 监测年,季度,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码 
) as a left join
(
	select 监测年 as 年度,季度,区域代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,区域代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,区域代码,企业代码
	) as a group by 监测年,季度,区域代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
exec(@sSQL)
END

GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetNoOrgAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetNoOrgAccount]
GO

-- =============================================
-- exec [GetNoOrgAccount] 1,'2011','1','','','','0','0','','1','1','2',''
-- exec [GetNoOrgAccount] 2,'2011','1','','','','0','0','','1','1','2',''
-- exec [GetNoOrgAccount] 4,'2011','1','','','','0','0','','1','1','2',''
-- exec [GetNoOrgAccount] 6,'2011','1','','','','0','0','','1','1','2',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气无组织排放存储过程,>
-- =============================================
CREATE proc [dbo].[GetNoOrgAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null)  '
set @temppjtype='污染物浓度是否达标'

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                      
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
set @sSQL='
with cte as
(
	select 监测年,季度,次数,行业,行业编码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,a.监测点名称,
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
		on substring(b.行业代码,1,2)=c.行业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,行业,行业编码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(	
	select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,行业,行业编码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,行业,行业编码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率 
			from cte group by 监测年,季度,次数,行业,行业编码,企业代码
		) a group by 监测年,季度,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码 
) as a left join
(
	select 监测年 as 年度,季度,行业编码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,行业编码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,行业编码,企业代码
	) as a group by 监测年,季度,行业编码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=2)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测点代码,a.监测项目编号,a.监测点名称,
		a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
		on substring(b.行政区代码,1,4)+''00''=d.市代码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,市,省代码,市代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
		) a group by 监测年,季度,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码+''/''+市代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,市代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,市代码,企业代码
	) as a group by 监测年,季度,省代码,市代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=4)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,省代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测点代码,a.监测项目编号,a.监测点名称,
		a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,省代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,省代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,省代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,省代码,企业代码
		) a group by 监测年,季度,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,企业代码
	) as a group by 监测年,季度,省代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=6)--专题区域
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.监测点名称,
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
		on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,专题区域,区域代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,专题区域,区域代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte a group by 监测年,季度,次数,专题区域,区域代码,企业代码
		) a group by 监测年,季度,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码 
) as a left join
(
	select 监测年 as 年度,季度,区域代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,区域代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,区域代码,企业代码
	) as a group by 监测年,季度,区域代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
exec(@sSQL)
END

GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetWhaterSourceAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetWhaterSourceAccount]
GO

-- =============================================
-- exec [GetWhaterSourceAccount] 1,'2011','4','','','','0','0','','1','1','1',''
-- exec [GetWhaterSourceAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterSourceAccount] 3,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterSourceAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterSourceAccount] 5,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterSourceAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废水污染源存储过程,>
-- =============================================
CREATE proc [dbo].[GetWhaterSourceAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(5),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=' and 行业代码 in('+@tradecode+')  '
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+')'
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
	set @sSQL='select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,行业,行业编码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,行业,行业编码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,行业,行业编码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,d.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
				on substring(b.行业代码,1,2)=c.行业代码
				join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
				and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
				where d.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,行业,行业编码,企业代码,监测点代码
		) a group by 监测年,季度,次数,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码,企业代码
) a group by 监测年,季度,行业,行业编码 order by 监测年,季度,行业编码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,省,市,省代码,市代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,e.受纳水体代码,e.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
				on substring(b.行政区代码,1,2)+''0000''=c.省代码
				join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
				on substring(b.行政区代码,1,4)+''00''=d.市代码
				join 业务_废水排口信息 e on a.监测年=e.监测年 and a.企业代码=e.企业代码 
				and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型
				where e.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码,企业代码
) a group by 监测年,季度,省,市,省代码,市代码 order by 监测年,季度,省代码,市代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,省,省代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,省代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,省,省代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,d.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
				on substring(b.行政区代码,1,2)+''0000''=c.省代码
				join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
				and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
				where d.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,省,省代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码,企业代码
) a group by 监测年,季度,省,省代码 order by 监测年,季度,省代码'
end
if(@type=3)--按水系查询
begin
	set @sSQL='select 水系 as 代码名称,水系代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,水系,水系代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,水系,水系代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,水系,水系代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,c.监测点名称,
				a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,c.受纳水体代码,b.自定义属性,b.行业代码,
				a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
				join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
				and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
				join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
				and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
				on substring(c.受纳水体代码,1,2)=substring(d.代码编码,1,2) or c.受纳水体代码=d.代码编码
				where c.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,水系,水系代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,水系,水系代码,企业代码
	) a group by 监测年,季度,水系,水系代码,企业代码
) a group by 监测年,季度,水系,水系代码 order by 监测年,季度,水系代码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='select 流域 as 代码名称,流域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,流域,流域代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,流域,流域代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,流域,流域代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,c.监测点名称,
				a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,c.受纳水体代码,b.自定义属性,b.行业代码,
				a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
				join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
				and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
				join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
				and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
				on substring(c.受纳水体代码,1,1)=substring(d.代码编码,1,1) or c.受纳水体代码=d.代码编码
				where c.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,流域,流域代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,流域,流域代码,企业代码
	) a group by 监测年,季度,流域,流域代码,企业代码
) a group by 监测年,季度,流域,流域代码 order by 监测年,季度,流域代码' 
end
if(@type=6)--专题区域
begin
set @sSQL='select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,专题区域,区域代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,d.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
				a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
				from 业务_废水监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
				on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
				join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
				and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
				where d.是否参与评价=1
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码,企业代码
) a group by 监测年,季度,专题区域,区域代码 order by 监测年,季度,区域代码'
end
exec(@sSQL)

END
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetletAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetletAccount]
GO

-- =============================================
-- exec [GetletAccount] 1,'2011','4','','','','0','0','','1','2','1',''
-- exec [GetletAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetletAccount] 3,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetletAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetletAccount] 5,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetletAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废水排放口存储过程,>
-- =============================================
CREATE proc [dbo].[GetletAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(5),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null)  '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=' and 行业代码 in('+@tradecode+')  '
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+')'
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
-----主体部分开始

declare @sSQL nvarchar (MAX)
BEGIN

if @type=1  --按行业查询
begin		
	set @sSQL='
with cte as
(
	select 监测年,季度,次数,行业,行业编码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,d.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
		on substring(b.行业代码,1,2)=c.行业代码
		join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		where d.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,行业,行业编码,企业代码,监测点代码
)	

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(	
	select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率  
	from 
	(	
		select 监测年,季度,行业,行业编码,企业代码,avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,行业,行业编码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率 
			from cte group by 监测年,季度,次数,行业,行业编码,企业代码
		) a group by 监测年,季度,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码 
) as a left join
(
	select 监测年 as 年度,季度,行业编码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,行业编码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,行业编码,企业代码
	) as a group by 监测年,季度,行业编码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=2)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,e.受纳水体代码,e.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
		on substring(b.行政区代码,1,4)+''00''=d.市代码
		join 业务_废水排口信息 e on a.监测年=e.监测年 and a.企业代码=e.企业代码 
		and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型
		where e.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(	
	select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,市,省代码,市代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率 
			from cte group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
		) a group by 监测年,季度,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码+''/''+市代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,市代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,市代码,企业代码
	) as a group by 监测年,季度,省代码,市代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=4)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,省代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,d.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		where d.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,省代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	/*计算某季度，某企业，监测点数量，及监测点达标率*/
		select 监测年,季度,省,省代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	/*计算某季度监测点达标率*/
			select 监测年,季度,次数,省,省代码,企业代码,
				cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率 
			from cte group by 监测年,季度,次数,省,省代码,企业代码
		) a group by 监测年,季度,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,省代码,企业代码
	) as a group by 监测年,季度,省代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end


if(@type=3)--按水系查询
begin
	set @sSQL='
with cte as
(
	select 监测年,季度,次数,水系,水系代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,c.受纳水体代码,
		a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,c.监测点名称,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
		join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
		and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
		join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
		and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
		on substring(c.受纳水体代码,1,2)=substring(d.代码编码,1,2) or c.受纳水体代码=d.代码编码
		where c.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,水系,水系代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 水系 as 代码名称,水系代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率  
	from 
	(	
		select 监测年,季度,水系,水系代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,水系,水系代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,水系,水系代码,企业代码
		) a group by 监测年,季度,水系,水系代码,企业代码
	) a group by 监测年,季度,水系,水系代码 
) as a left join
(
	select 监测年 as 年度,季度,水系代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,水系代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,水系代码,企业代码
	) as a group by 监测年,季度,水系代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='
with cte as
(
	select 监测年,季度,次数,流域,流域代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,c.受纳水体代码,
		a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,c.监测点名称,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
		join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
		and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
		join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
		and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
		on substring(c.受纳水体代码,1,1)=substring(d.代码编码,1,1) or c.受纳水体代码=d.代码编码
		where c.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,流域,流域代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 流域 as 代码名称,流域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,流域,流域代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,流域,流域代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,流域,流域代码,企业代码
		) a group by 监测年,季度,流域,流域代码,企业代码
	) a group by 监测年,季度,流域,流域代码 

) as a left join
(
	select 监测年 as 年度,季度,流域代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,流域代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,流域代码,企业代码
	) as a group by 监测年,季度,流域代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码' 
end
if(@type=6)--专题区域
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测点代码,a.监测项目编号,
		a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,a.排放上限,a.排放下限,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,d.监测点名称,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
		on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型 
		where d.是否参与评价=1
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,专题区域,区域代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,专题区域,区域代码,企业代码,
			cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,专题区域,区域代码,企业代码
		) a group by 监测年,季度,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码 
) as a left join
(
	select 监测年 as 年度,季度,区域代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,区域代码,企业代码,count(distinct 监测点代码) as 监测点数量
		from cte group by 监测年,季度,区域代码,企业代码
	) as a group by 监测年,季度,区域代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
exec(@sSQL)

END
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetEquipAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetEquipAccount]
GO

-- =============================================
-- exec [GetEquipAccount] 1,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetEquipAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetEquipAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetEquipAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气排放设备存储过程,>
-- =============================================
CREATE proc [dbo].[GetEquipAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
   --变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)		
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempControlType=''
set @tempControlTypeGas=''
set @temppolutionCode=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null)  '
set @temppjtype='污染物浓度是否达标'

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
set @sSQL='
with cte as
(
	select 监测年,季度,次数,行业,行业编码,企业代码,排污设备代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,d.排污设备代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,e.处理设施名称,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期   
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
		on substring(b.行业代码,1,2)=c.行业代码 
		join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
		join 业务_企业废气处理设施信息 e
		on d.排污设备代码=e.排污设备编码 and d.监测年=e.监测年 and d.企业代码=e.企业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,行业,行业编码,企业代码,排污设备代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(	
	select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,行业,行业编码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,行业,行业编码,企业代码,
			cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,行业,行业编码,企业代码
		) a group by 监测年,季度,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码 
) as a left join
(
	select 监测年 as 年度,季度,行业编码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,行业编码,企业代码,count(distinct 排污设备代码) as 监测点数量
		from cte group by 监测年,季度,行业编码,企业代码
	) as a group by 监测年,季度,行业编码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=2)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,市,省代码,市代码,企业代码,排污设备代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,e.排污设备代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,f.处理设施名称,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期   
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
		on substring(b.行政区代码,1,4)+''00''=d.市代码
		join 业务_废气监测点信息 e on a.监测年=e.监测年 and a.企业代码=e.企业代码 
		and a.监测点代码=e.监测点代码  and a.企业类型=e.企业类型
		join 业务_企业废气处理设施信息 f
		on e.排污设备代码=f.排污设备编码 and e.监测年=f.监测年 and e.企业代码=f.企业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,排污设备代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,市,省代码,市代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
			cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
		) a group by 监测年,季度,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码
) as a left join
(
	select 监测年 as 年度,季度,省代码+''/''+市代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,市代码,企业代码,count(distinct 排污设备代码) as 监测点数量
		from cte group by 监测年,季度,省代码,市代码,企业代码
	) as a group by 监测年,季度,省代码,市代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=4)--按地区查询
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,省,省代码,企业代码,排污设备代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,d.排污设备代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,e.处理设施名称, 
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期   
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.省代码
		join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
		join 业务_企业废气处理设施信息 e
		on d.排污设备代码=e.排污设备编码 and d.监测年=e.监测年 and d.企业代码=e.企业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,省,省代码,企业代码,排污设备代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率 
	from 
	(	
		select 监测年,季度,省,省代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,省,省代码,企业代码,
			cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,省,省代码,企业代码
		) a group by 监测年,季度,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码 
) as a left join
(
	select 监测年 as 年度,季度,省代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,省代码,企业代码,count(distinct 排污设备代码) as 监测点数量
		from cte group by 监测年,季度,省代码,企业代码
	) as a group by 监测年,季度,省代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
if(@type=6)--专题区域
begin
set @sSQL='
with cte as
(
	select 监测年,季度,次数,专题区域,区域代码,企业代码,排污设备代码,
	case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
	from 
	(
		select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,d.排污设备代码,a.监测项目编号,
		a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
		b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,e.处理设施名称, 
		a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
		join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
		on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
		and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
		join 业务_企业废气处理设施信息 e
		on d.排污设备代码=e.排污设备编码 and d.监测年=e.监测年 and d.企业代码=e.企业代码 
	)a 
	where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
	group by 监测年,季度,次数,专题区域,区域代码,企业代码,排污设备代码
)

select a.代码名称,a.代码编码,a.年度,a.季度,a.企业数量,b.监测点数量,a.达标率
from 
(
	select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,
	avg(监测点达标率) 达标率
	from 
	(	
		select 监测年,季度,专题区域,区域代码,企业代码,
		avg(监测点达标率) as 监测点达标率
		from 
		(	
			select 监测年,季度,次数,专题区域,区域代码,企业代码,
			cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 监测点达标率
			from cte group by 监测年,季度,次数,专题区域,区域代码,企业代码
		) a group by 监测年,季度,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码 
) as a left join
(
	select 监测年 as 年度,季度,区域代码 as 代码编码,sum(监测点数量) as 监测点数量
	from 
	(
		select 监测年,季度,区域代码,企业代码,count(distinct 排污设备代码) as 监测点数量
		from cte group by 监测年,季度,区域代码,企业代码
	) as a group by 监测年,季度,区域代码
) as b on a.年度=b.年度 and a.季度=b.季度 and a.代码编码=b.代码编码
order by a.年度,a.季度,a.代码编码'
end
exec(@sSQL)
END

GO

-- =============================================
-- exec [GetCropGasAccount] 1,'2011','1','','','','0','0','','1','1','1','06        ',''
-- exec [GetCropGasAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCropGasAccount] 4,'2011','1','','','','0','0','','1','1','1','120000    ',''
-- exec [GetCropGasAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气监测点企业存储过程,>
-- =============================================
ALTER proc [dbo].[GetCropGasAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'
set @temppriparm=''

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end

--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN

if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业 as 代码名称,行业编码 as 代码编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省 as 代码名称,省代码 as 代码编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,省代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,省代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=6)--按专题区域
begin
set @sSQL='select 监测年 as 年度,季度,专题区域 as 代码名称,区域代码 as 代码编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
print (@sSQL)
exec(@sSQL)
END

GO

-- =============================================
-- exec [GetCorpEquipAccount] 1,'2011','1','','','','0','0','','1','1','1','06        ',''
-- exec [GetCorpEquipAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCorpEquipAccount] 4,'2011','1','','','','0','0','','1','1','1','120000    ',''
-- exec [GetCorpEquipAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气企业排放设备达标率,>
-- =============================================
ALTER proc [dbo].[GetCorpEquipAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'
set @temppriparm=''

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null ' 
    end	
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end

--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN

if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业,行业编码,详细名称,企业代码,count(排污设备代码) as 排污设备数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,avg(排污设备达标率) as 排污设备达标率
from 
(	/*计算某季度排污设备达标率*/
	select 监测年,季度,行业,行业编码,详细名称,企业代码,排污设备代码,sum(排污设备是否达标) as 达标数,count(排污设备是否达标) as 总数,
	cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 排污设备达标率
	from 
	(	/*计算某季度、某次，排污设备是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,排污设备代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,d.排污设备代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码 join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,排污设备代码
	) a group by 监测年,季度,行业,行业编码,详细名称,企业代码,排污设备代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,count(排污设备代码) as 排污设备数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,avg(排污设备达标率) as 排污设备达标率
from 
(	/*计算某季度排污设备达标率*/
	select 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,排污设备代码,sum(排污设备是否达标) as 达标数,count(排污设备是否达标) as 总数,
	cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 排污设备达标率
	from 
	(	/*计算某季度、某次，排污设备是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,排污设备代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,e.排污设备代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码 join 业务_废气监测点信息 e on a.监测年=e.监测年 
			and a.企业代码=e.企业代码 and a.监测点代码=e.监测点代码  and a.企业类型=e.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,排污设备代码
	) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,排污设备代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,count(排污设备代码) as 排污设备数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,avg(排污设备达标率) as 排污设备达标率
	from 
	(	/*计算某季度排污设备达标率*/
		select 监测年,季度,省,省代码,详细名称,企业代码,排污设备代码,sum(排污设备是否达标) as 达标数,count(排污设备是否达标) as 总数,
	cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 排污设备达标率
		from 
		(	/*计算某季度、某次，排污设备是否达标*/
			select 监测年,季度,次数,省,省代码,详细名称,企业代码,排污设备代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,d.排污设备代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
				on substring(b.行政区代码,1,2)+''0000''=c.省代码 join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
			group by 监测年,季度,次数,省,省代码,详细名称,企业代码,排污设备代码
		) a group by 监测年,季度,省,省代码,详细名称,企业代码,排污设备代码
	) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=6)--专题区域
begin
set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,count(排污设备代码) as 排污设备数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,avg(排污设备达标率) as 排污设备达标率
	from 
	(	/*计算某季度排污设备达标率*/
		select 监测年,季度,专题区域,区域代码,详细名称,企业代码,排污设备代码,sum(排污设备是否达标) as 达标数,count(排污设备是否达标) as 总数,
	cast(sum(排污设备是否达标) as decimal(18,2))/count(排污设备是否达标) as 排污设备达标率
		from 
		(	/*计算某季度、某次，排污设备是否达标*/
			select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,排污设备代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 排污设备是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,d.排污设备代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
				on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
				join 业务_废气监测点信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
				and a.监测点代码=d.监测点代码  and a.企业类型=d.企业类型
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
			group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,排污设备代码
		) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码,排污设备代码
	) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
print (@sSQL)
exec(@sSQL)
END

GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetGasSourceAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetGasSourceAccount]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- exec [GetGasSourceAccount] 1,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetGasSourceAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetGasSourceAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetGasSourceAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气污染源存储过程,>
-- =============================================
CREATE proc [dbo].[GetGasSourceAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
set @temppjtype='污染物浓度是否达标'

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
	set @sSQL='select 行业 as 代码名称,行业编码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,行业,行业编码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，某企业是否达标*/
		select 监测年,季度,次数,行业,行业编码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,行业,行业编码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
				on substring(b.行业代码,1,2)=c.行业代码
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,行业,行业编码,企业代码,监测点代码
		) a group by 监测年,季度,次数,行业,行业编码,企业代码
	) a group by 监测年,季度,行业,行业编码,企业代码
) a group by 监测年,季度,行业,行业编码 order by 监测年,季度,行业编码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,省,市,省代码,市代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度,次数企业是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
				on substring(b.行政区代码,1,2)+''0000''=c.省代码
				join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
				on substring(b.行政区代码,1,4)+''00''=d.市代码
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,省,市,省代码,市代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码,企业代码
) a group by 监测年,季度,省,市,省代码,市代码 order by 监测年,季度,省代码,市代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业，监测点数量，及监测点平均达标率*/
	select 监测年,季度,省,省代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,省代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,省,省代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
				on substring(b.行政区代码,1,2)+''0000''=c.省代码
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,省,省代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码,企业代码
) a group by 监测年,季度,省,省代码 order by 监测年,季度,省代码'
end
if(@type=6)--专题区域
begin
set @sSQL='select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业，监测点数量，及监测点平均达标率*/
	select 监测年,季度,专题区域,区域代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,企业代码,
		case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(	/*计算某季度、某次，监测点是否达标*/
			select 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码,
			case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测点代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,a.监测点名称,
				b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,a.排放上限,a.排放下限,
				convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
				from 业务_废气监测数据 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
				join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
				on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
			)a 
			where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+'
			group by 监测年,季度,次数,专题区域,区域代码,企业代码,监测点代码
		) a group by 监测年,季度,次数,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码,企业代码
) a group by 监测年,季度,专题区域,区域代码 order by 监测年,季度,区域代码'
end
print (@sSQL)
exec(@sSQL)
END

GO


-- =============================================
-- exec [GetCorpGasSourceAccount] 1,'2011','1','','','','0','0','','1','1','1','06        ',''
-- exec [GetCorpGasSourceAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCorpGasSourceAccount] 4,'2011','1','','','','0','0','','1','1','1','120000    ',''
-- exec [GetCorpGasSourceAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,企业废气污染源存储过程,>
-- =============================================
ALTER proc [dbo].[GetCorpGasSourceAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null ' 
    end	
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end

--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业,行业编码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，某企业是否达标*/
	select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度,次数企业是否达标*/
	select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,省,省代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,省,省代码,详细名称,企业代码
) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=6)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废气监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码
) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
print (@sSQL)
exec(@sSQL)
END

GO

-- =============================================
-- exec [GetCropNoOrgAccount] 1,'2011','1','','','','0','0','','1','1','1','06',''
-- exec [GetCropNoOrgAccount] 2,'2011','1','','','','0','0','','1','1','1','06',''
-- exec [GetCropNoOrgAccount] 4,'2011','1','','','','0','0','','1','1','1','06',''
-- exec [GetCropNoOrgAccount] 6,'2011','1','','','','0','0','','1','1','1','06',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,废气无组织企业存储过程,>
-- =============================================
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetCropNoOrgAccount]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
drop procedure [dbo].[GetCropNoOrgAccount]
go
Create proc [dbo].[GetCropNoOrgAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @temppolutionCode=''
set @tempControlType=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'
set @temppriparm=''

--行政区代码
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业代码
if @tradecode!=''
begin
	set @tempTrade=' and 行业代码 in('+@tradecode+') '
end
--控制级别
if @controltype!='0'
begin
	set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+') '
end
--气控制级别
if @controltypegas!='0'
begin
	set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+') '
end
--监测项目
if @polutioncode!=''
begin
	set @temppolutionCode=' and 监测项目编号='''+@polutioncode+''' '
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end

--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end
                   
-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN

if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业,行业编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,省代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,省代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=6)--按专题区域
begin
set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.污染物浓度,b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废气无组织排放监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
print (@sSQL)
exec(@sSQL)
END

GO


-- =============================================
-- exec [GetCropletAccount] 1,'2011','1','','','','0','0','','1','1','1','03        ',''
-- exec [GetCropletAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCropletAccount] 3,'2011','1','','','','0','0','','1','1','1','AA00000000',''
-- exec [GetCropletAccount] 4,'2011','1','','','','0','0','','1','1','1','110000    ',''
-- exec [GetCropletAccount] 5,'2011','1','','','','0','0','','1','1','1','A         ',''
-- exec [GetCropletAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,,huabo>
-- Create date: <Create Date,2011-1--25,>
-- Description:	<Description,废水排放口企业存储过程,>
-- =============================================
ALTER proc [dbo].[GetCropletAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(10),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=' and 行业代码 in('+@tradecode+')  '
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+')'
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null ' 
    end	
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=3 and @priparm<>'000000'
begin
	set @temppriparm=' and 水系代码='''+@priparm+''' '
end
if @type=5 and @priparm<>'000000'
begin
	set @temppriparm=' and 流域代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业,行业编码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,行业,行业编码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if @type=2 --按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,e.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
			join 业务_废水排口信息 e on a.监测年=e.监测年 and a.企业代码=e.企业代码 
			and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,省,省代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,省,省代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=3)--按水系查询
begin
	set @sSQL='select 监测年 as 年度,季度,水系,水系代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,水系,水系代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,水系,水系代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,b.详细名称,
			a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,c.受纳水体代码,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
			join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
			and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(c.受纳水体代码,1,2)=substring(d.代码编码,1,2) or c.受纳水体代码=d.代码编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,水系,水系代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,水系,水系代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,水系,水系代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='select 监测年 as 年度,季度,流域,流域代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,流域,流域代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,流域,流域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,b.详细名称,
			a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,c.受纳水体代码,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期 
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
			join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
			and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(c.受纳水体代码,1,1)=substring(d.代码编码,1,1) or c.受纳水体代码=d.代码编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,流域,流域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,流域,流域代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,流域,流域代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=6) --按专题区域
begin
	set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,count(监测点代码) as 监测点数量,
sum(总数) as 监测次数,sum(达标数) as 达标次数,cast(sum(达标数) as decimal(18,2))/sum(总数) as 监测点达标率
from 
(	/*计算某季度监测点达标率*/
	select 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码,sum(监测点是否达标) as 达标数,count(监测点是否达标) as 总数
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码,监测点代码
) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end

print @sSQL
exec(@sSQL)

END
GO


-- =============================================
-- exec [GetCorpWhaterSourceAccount] 1,'2011','1','','','','0','0','','1','1','1','03        ',''
-- exec [GetCorpWhaterSourceAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCorpWhaterSourceAccount] 3,'2011','1','','','','0','0','','1','1','1','AA00000000',''
-- exec [GetCorpWhaterSourceAccount] 4,'2011','1','','','','0','0','','1','1','1','110000    ',''
-- exec [GetCorpWhaterSourceAccount] 5,'2011','1','','','','0','0','','1','1','1','A         ',''
-- exec [GetCorpWhaterSourceAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,,huabo>
-- Create date: <Create Date,2011-1--25,>
-- Description:	<Description,企业废水污染源存储过程,>
-- =============================================
ALTER proc [dbo].[GetCorpWhaterSourceAccount]
(
	@type int,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(5),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=' and 行业代码 in('+@tradecode+')  '
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlTypeGas=' and 污染源控制级别代码气 in ('+@controltypegas+')'
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null ' 
    end	
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 污染物浓度 is not null '
	end
end
--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=3 and @priparm<>'000000'
begin
	set @temppriparm=' and 水系代码='''+@priparm+''' '
end
if @type=5 and @priparm<>'000000'
begin
	set @temppriparm=' and 流域代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN
if @type=1  --按行业查询
begin		
	set @sSQL='select 监测年 as 年度,季度,行业,行业编码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.行业,c.行业代码 as 行业编码,b.行业代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) c
			on substring(b.行业代码,1,2)=c.行业代码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,行业,行业编码,详细名称,企业代码
) a group by 监测年,季度,行业,行业编码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,e.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
			join 业务_废水排口信息 e on a.监测年=e.监测年 and a.企业代码=e.企业代码 
			and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码
) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,省,省代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,省,省代码,详细名称,企业代码
) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=3)--按水系查询
begin
	set @sSQL='select 监测年 as 年度,季度,水系,水系代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,水系,水系代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,水系,水系代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,b.详细名称,
			a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,c.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
			join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
			and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(c.受纳水体代码,1,2)=substring(d.代码编码,1,2) or c.受纳水体代码=d.代码编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,水系,水系代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,水系,水系代码,详细名称,企业代码
) a group by 监测年,季度,水系,水系代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='select 监测年 as 年度,季度,流域,流域代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,流域,流域代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,流域,流域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,b.详细名称,
			a.企业代码,a.监测点代码,a.监测项目编号,a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,c.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码
			join 业务_废水排口信息 c on a.监测年=c.监测年 and a.企业代码=c.企业代码 
			and a.监测点代码=c.监测点代码 and a.企业类型=c.企业类型   
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(c.受纳水体代码,1,1)=substring(d.代码编码,1,1) or c.受纳水体代码=d.代码编码
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,流域,流域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,流域,流域代码,详细名称,企业代码
) a group by 监测年,季度,流域,流域代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=6)--按专题区域
begin
set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,
cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
from 
(	/*计算某季度、某次，企业是否达标*/
	select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,
	case (sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染源是否达标
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 监测点是否达标
		from 
		(
			select a.企业类型,a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测点代码,a.监测项目编号,
			a.污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.污染物浓度,d.受纳水体代码,
			b.行政区代码,b.污染源控制级别代码,b.污染源控制级别代码气,b.自定义属性,b.行业代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期  
			from 业务_废水监测数据 a join V_工业和固废企业_简单 b
			on a.监测年=b.监测年 and a.企业类型=b.企业类型 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
			join 业务_废水排口信息 d on a.监测年=d.监测年 and a.企业代码=d.企业代码 
			and a.监测点代码=d.监测点代码 and a.企业类型=d.企业类型
		)a 
		where 企业类型='+@tempenterprisetype+@temptimewhere+@tempCity+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,监测点代码
	) a group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码
) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
--print @sSQL
exec(@sSQL)

END
GO

-- =============================================
-- exec [GetCorpWhaterPolutionAccount] 2,'2011','1','','','','0','0','','1','1','1','110100    ',''
-- exec [GetCorpWhaterPolutionAccount] 3,'2011','1','','','','0','0','','1','1','1','AA00000000',''
-- exec [GetCorpWhaterPolutionAccount] 4,'2011','1','','','','0','0','','1','1','1','110000    ',''
-- exec [GetCorpWhaterPolutionAccount] 5,'2011','1','','','','0','0','','1','1','1','A         ',''
-- exec [GetCorpWhaterPolutionAccount] 6,'2011','1','','','','0','0','','1','1','1','72954',''
-- Author:		<Author,,huabo>
-- Create date: <Create Date,2011-1--25,>
-- Description:	<Description,企业污水处理厂污染源存储过程,>
-- =============================================
ALTER proc [dbo].[GetCorpWhaterPolutionAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(5),
	@joinType varchar(10),
	@pjType varchar(10),
	@priparm varchar(50),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temppriparm varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and 污染物浓度 is not null '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=''
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlType=''
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--过滤主键条件
if @type=1 and @priparm<>'000000'
begin
	set @temppriparm=' and 行业编码='''+@priparm+''' '
end
if @type=2 and @priparm<>'000000'
begin
	set @temppriparm=' and 市代码='''+@priparm+''' '
end
if @type=4 and @priparm<>'000000'
begin
	set @temppriparm=' and 省代码='''+@priparm+''' '
end
if @type=3 and @priparm<>'000000'
begin
	set @temppriparm=' and 水系代码='''+@priparm+''' '
end
if @type=5 and @priparm<>'000000'
begin
	set @temppriparm=' and 流域代码='''+@priparm+''' '
end
if @type=6 and @priparm<>'000000'
begin
	set @temppriparm=' and 区域代码='''+@priparm+''' '
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN

if(@type=2)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,市,省代码,市代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码,
		case (sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,b.详细名称,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,市,省代码,市代码,详细名称,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 监测年 as 年度,季度,省,省代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,省代码,详细名称,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.省,c.省代码,b.详细名称,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,省,省代码,详细名称,企业代码
	) a group by 监测年,季度,省,省代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
if(@type=3)--按水系查询
begin
	set @sSQL='select 监测年 as 年度,季度,水系,水系代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,水系,水系代码,详细名称,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,b.详细名称,a.企业代码,a.监测项目编号,b.受纳水体代码,			
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(b.受纳水体代码,1,2)=substring(d.代码编码,1,2) or b.受纳水体代码=d.代码编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,水系,水系代码,详细名称,企业代码
	) a group by 监测年,季度,水系,水系代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='select 监测年 as 年度,季度,流域,流域代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，污染源是否达标*/
		select 监测年,季度,次数,流域,流域代码,详细名称,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,b.详细名称,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码    
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(b.受纳水体代码,1,1)=substring(d.代码编码,1,1) or b.受纳水体代码=d.代码编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,流域,流域代码,详细名称,企业代码
	) a group by 监测年,季度,流域,流域代码,详细名称,企业代码 order by 季度,监测年,企业代码' 
end
if(@type=6)--专题区域
begin
set @sSQL='select 监测年 as 年度,季度,专题区域,区域代码,详细名称,企业代码,sum(污染源是否达标) 达标次数,
	count(污染源是否达标) as 监测次数,cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,b.详细名称,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade++@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+@temppriparm+'
		group by 监测年,季度,次数,专题区域,区域代码,详细名称,企业代码
	) a group by 监测年,季度,专题区域,区域代码,详细名称,企业代码 order by 季度,监测年,企业代码'
end
exec(@sSQL)

END
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetWhaterPolutionAccount]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetWhaterPolutionAccount]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- exec [GetWhaterPolutionAccount] 2,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterPolutionAccount] 3,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterPolutionAccount] 4,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterPolutionAccount] 5,'2011','1','','','','0','0','','1','1','1',''
-- exec [GetWhaterPolutionAccount] 6,'2011','1','','','','0','0','','1','1','1',''
-- Author:		<Author,huabo,>
-- Create date: <Create Date,2011-10-25,>
-- Description:	<Description,污水处理厂污染源存储过程,>
-- =============================================
CREATE proc [dbo].[GetWhaterPolutionAccount]
(
	@type int ,
	@year varchar(4),
	@quarter varchar(20),
	@citycode varchar(max),
	@tradecode varchar(max),
	@whatercode varchar(max),
	@controltype varchar(50),
	@controltypegas varchar(50),
	@polutioncode varchar(50),
	@enterprisetype varchar(5),
	@joinType varchar(10),
	@pjType varchar(10),
	@timeWhere varchar(100)
)
as
--变量设置开始
declare @tempCity varchar(max)
declare @tempTrade varchar(max)
declare @tempWhater varchar(max)
declare @tempControlType varchar(50)
declare @tempControlTypeGas varchar(50)
declare @temppolutionCode varchar(50)
declare @tempenterprisetype varchar(100)
declare @tempjointype varchar(100)
declare @temppjtype varchar(100)
declare @temptimewhere varchar(100)

set @tempCity=''
set @tempTrade=''
set @tempWhater=''
set @tempControlType=''
set @temppolutionCode=''
set @tempControlTypeGas=''
set @tempenterprisetype='1'
set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null)  '
set @temppjtype='污染物浓度是否达标'

--受纳水体
if @whatercode!=''
begin
	set @whatercode=''''+replace(@whatercode,',',''',''')+''''
	set @tempWhater=' and (substring(受纳水体代码,1,2) in ('+@whatercode+') or 受纳水体代码 in('+@whatercode+')) '
end
--行政区
if @citycode!=''
begin
	set @tempCity=@citycode
end
--行业
if @tradecode!=''
begin
set @tempTrade=''
end
--控制级别
if @controltype!='0'
begin
set @tempControlType=' and 污染源控制级别代码 in ('+@controltype+')'
end
--控制级别气
if @controltypegas!='0'
begin
set @tempControlType=''
end
--监测项目
if @polutioncode!=''
begin
set @temppolutionCode='and 监测项目编号='''+@polutioncode+''''
end
--企业类型
if @enterprisetype<>''
begin
	set @tempenterprisetype=@enterprisetype
end
--如果评价类型为“实测浓度”
if @pjType='1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--如果评价类型为“基准浓度”
else if @pjType='2'
begin
	set @temppjtype='基准浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and 是否参与基准浓度=1 and 污染物浓度是否达标 is not null '
	end
	else
    begin
		--是否参与基准浓度 is null的数据是无效的，需要过滤掉，
		--类似于没有标准值的监测项目对于达标计算而言是无意义的。
        set @tempjointype=' and 是否参与基准浓度 is not null and 污染物浓度是否达标 is not null ' 
    end
end
--如果企业类型不是污染源
if @enterprisetype<>'1'
begin
	set @temppjtype='污染物浓度是否达标'
	if @joinType='1'
	begin
		set @tempjointype=' and (污染物浓度 is not null and 污染物浓度是否达标 is not null) '
	end
	else
	begin
		set @tempjointype=' and 污染物浓度是否达标 is not null '
	end
end
--时间条件
if @timeWhere is not null and @timeWhere<>''
begin
	set @temptimewhere=@timeWhere
end
else
begin
	set @temptimewhere=' and 监测年='+@year+' and 季度 in ('+@quarter+') '
end

-----主体部分开始
declare @sSQL nvarchar (MAX)
BEGIN

if(@type=2)--按地区查询
begin
set @sSQL='select 省+''/''+市 as 代码名称,省代码+''/''+市代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,省,市,省代码,市代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,市,省代码,市代码,企业代码,
		case (sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标)) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.省,d.市,c.省代码,d.市代码,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,a.排放上限,a.排放下限,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
			join (select 代码编码 as 市代码,代码名称 as 市 from 系统_代码 where 代码类型编码=14) d
			on substring(b.行政区代码,1,4)+''00''=d.市代码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade+@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
		group by 监测年,季度,次数,省,市,省代码,市代码,企业代码
	) a group by 监测年,季度,省,市,省代码,市代码,企业代码
) a group by 监测年,季度,省,市,省代码,市代码 order by 监测年,季度,省代码,市代码'
end
if(@type=4)--按地区查询
begin
set @sSQL='select 省 as 代码名称,省代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,省,省代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,省,省代码,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.省,c.省代码,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,a.排放上限,a.排放下限,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select 代码编码 as 省代码,代码名称 as 省 from 系统_代码 where 代码类型编码=14) c
			on substring(b.行政区代码,1,2)+''0000''=c.省代码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade+@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
		group by 监测年,季度,次数,省,省代码,企业代码
	) a group by 监测年,季度,省,省代码,企业代码
) a group by 监测年,季度,省,省代码 order by 监测年,季度,省代码'
end
if(@type=3)--按水系查询
begin
	set @sSQL='select 水系 as 代码名称,水系代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,水系,水系代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，监测点是否达标*/
		select 监测年,季度,次数,水系,水系代码,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,d.代码名称 as 水系,d.代码编码 as 水系代码,a.企业代码,a.监测项目编号,b.受纳水体代码,			
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,a.排放上限,a.排放下限,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=16 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(b.受纳水体代码,1,2)=substring(d.代码编码,1,2) or b.受纳水体代码=d.代码编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade+@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
		group by 监测年,季度,次数,水系,水系代码,企业代码
	) a group by 监测年,季度,水系,水系代码,企业代码
) a group by 监测年,季度,水系,水系代码 order by 监测年,季度,水系代码' 
end
if(@type=5)--按流域查询
begin
	set @sSQL='select 流域 as 代码名称,流域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,流域,流域代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，污染源是否达标*/
		select 监测年,季度,次数,流域,流域代码,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,d.代码名称 as 流域,d.代码编码 as 流域代码,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,a.排放上限,a.排放下限,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码    
			join (select 代码编码,代码名称 from 系统_代码 where 代码类型编码=20 
			and (substring(代码编码,3,8)=''00000000'' or len(代码编码)=1)) d
			on substring(b.受纳水体代码,1,1)=substring(d.代码编码,1,1) or b.受纳水体代码=d.代码编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade+@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
		group by 监测年,季度,次数,流域,流域代码,企业代码
	) a group by 监测年,季度,流域,流域代码,企业代码
) a group by 监测年,季度,流域,流域代码 order by 监测年,季度,流域代码' 
end
if(@type=6)--专题区域
begin
set @sSQL='select 专题区域 as 代码名称,区域代码 as 代码编码,监测年 as 年度,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
from 
(	/*计算某季度，某企业达标率*/
	select 监测年,季度,专题区域,区域代码,企业代码,
	cast(sum(污染源是否达标) as decimal(18,2))/count(污染源是否达标) as 污染源达标率
	from 
	(	/*计算某季度、某次，企业是否达标*/
		select 监测年,季度,次数,专题区域,区域代码,企业代码,
		case (sum(cast('+@temppjtype+' as int))-count('+@temppjtype+')) when 0 then 1 else 0 end as 污染源是否达标
		from 
		(
			select a.监测年,a.季度,a.次数,c.代码名称 as 专题区域,c.ID as 区域代码,a.企业代码,a.监测项目编号,b.受纳水体代码,
			a.浓度是否达标 as 污染物浓度是否达标,a.基准浓度是否达标,a.是否参与基准浓度,a.出口污染物浓度 as 污染物浓度,
			b.行政区代码,b.控制级别代码 as 污染源控制级别代码,a.排放上限,a.排放下限,
			convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期
			from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
			on a.监测年=b.监测年 and a.企业代码=b.企业代码 
			join (select a.代码名称,a.ID,b.行政区名称,b.行政区编码 from 系统_代码 a join 系统_专题区域代码 b
			on a.ID=b.区域类型编码 where a.代码类型编码=33) c on b.行政区代码=c.行政区编码
		)a 
		where 1=1 '+@temptimewhere+@tempCity+@tempTrade+@tempControlType+@tempControlTypeGas+@tempWhater+@temppolutionCode+@tempjointype+'
		group by 监测年,季度,次数,专题区域,区域代码,企业代码
	) a group by 监测年,季度,专题区域,区域代码,企业代码
) a group by 监测年,季度,专题区域,区域代码 order by 监测年,季度,区域代码'
end

--print @sSQL
exec(@sSQL)

END
GO


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetGuFeiChuLi]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetGuFeiChuLi]
GO

-- 3.单个企业-固废处理场
--exec GetGuFeiChuLi 2011,1,'13060478704963-2'
create proc [dbo].[GetGuFeiChuLi]
(
@year varchar(4),
@Quarter varchar(20),
@EnterpriseCode varchar(500)
)
as
begin
-- 0-1基本信息
select top 1 [详细名称] as 企业名称,'' as 行业,c.[代码名称] as 行政区,
[行政区代码],[法人代码],[企业代码],b.[代码名称] as 固废类型,d.[代码名称] as 固废处理方式,设计处理量 as 设计处理能力,
(select [监测点名称]+' ' from dbo.业务_废气监测点信息 where 监测年=@year and 业务_废气监测点信息.企业代码=a.企业代码 FOR XML PATH('')) as 废气监测点,
(select [监测点名称]+' ' from dbo.业务_无组织排放信息  where 监测年=@year and 业务_无组织排放信息.企业代码=a.企业代码 FOR XML PATH('')) as 无组织排放监测点,
(select [监测点名称]+' ' from dbo.业务_废水排口信息  where 监测年=@year and 业务_废水排口信息.企业代码=a.企业代码 FOR XML PATH('')) as 废水监测点
from dbo.业务_固废处理厂信息 a
inner join 系统_代码 b on b.代码编码=a.固废类型代码 and b.代码类型编码=23 --固废类型代码
inner join 系统_代码 c on c.代码编码=a.行政区代码 and c.代码类型编码=14 --区域
inner join 系统_代码 d on d.代码编码=a.固废处理方式代码 and d.代码类型编码=22 --固废处理方式
where 监测年=@year and 企业代码=@EnterpriseCode

--7-1手工监测-废水
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,
[监测点名称],[进口水量],[废水排放量],b.[代码名称] as 治理设施运行情况,[工况负荷],c.[监测项目名称],[废水处理设施进口浓度],[污染物浓度]  
from dbo.业务_废水监测数据 a 
left join 系统_代码 b on a.[治理设施是否正常运行]=b.代码编码 and b.代码类型编码=28 and a.企业类型=3 
left join 系统_监测项目 c on c.监测项目编号=a.监测项目编号 
left join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@EnterpriseCode

--7-2手工监测-废气
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,处理设施前实测废气排放量,
废气排放量,测点温度,含氧量,日生产小时数,b.[代码名称] as 治理设施情况,工况负荷,c.[监测项目名称],处理设施前实测浓度,污染物实测浓度,污染物折算浓度
from dbo.业务_废气监测数据 a 
left join 系统_代码 b on a.[治理设施是否正常运行]=b.代码编码 and b.代码类型编码=28 and a.企业类型=3
left join 系统_监测项目 c on c.监测项目编号=a.监测项目编号 
left join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@EnterpriseCode

--7-3手工监测-废气无组织
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,监测项目名称,上风向监测值,下风向1监测值,下风向2监测值,下风向3监测值
from dbo.业务_废气无组织排放监测数据 a 
inner join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.企业类型=3 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@EnterpriseCode

--7-4手工监测-地下水监测
select * from (
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测点名称,c.[监测项目名称],污染物浓度,
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_固体废物处置厂地下水监测数据 a
inner join 系统_监测项目 c on c.监测项目编号=a.监测项目编号
inner join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and d.企业代码=@EnterpriseCode
) as a where 季度=@Quarter

--8-1自动监测-废水
select * from (
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测点名称,废水排放量,b.[监测项目名称],c.监测设备名称,污染物浓度,
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_在线监测废水数据 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.企业类型=3
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and d.企业代码=@EnterpriseCode
) as a where 季度=@Quarter

--8-2自动监测-废气
select * from (
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,废气排放量,含氧量,b.[监测项目名称],c.[监测设备名称],污染物实测浓度,污染物折算浓度, 
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_在线监测废气数据 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.企业类型=3
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_固废处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and d.企业代码=@EnterpriseCode
) as a where 季度=@Quarter

--废气监测点达标评价
select c.监测点名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.监测点代码,'',2) as 超标说明
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,基准浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据  
		where 企业类型=3 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@EnterpriseCode
	) as aa group by 监测年,季度,次数,企业代码,监测点代码,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年 join 业务_废气监测点信息 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.监测点代码=c.监测点代码


--废水监测点达标评价
select c.监测点名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.监测点代码,'',1) as 超标说明
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,污染物浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废水监测数据  
		where 企业类型=3 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@EnterpriseCode
	) as aa group by 企业代码,监测点代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年 join 业务_废水排口信息 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.监测点代码=c.监测点代码 
where c.是否参与评价=1

--废气排放设备达标评价
select c.排污设备名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.排污设备代码,'',4) as 超标说明
from 
(
	select 企业代码,排污设备代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,排污设备代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据  
		where 企业类型=3 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@EnterpriseCode
	) as aa group by 企业代码,排污设备代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
join 业务_企业废气排放设备 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.排污设备代码=c.排污设备代码

--废水污染源达标评价
select a.受纳水体代码,d.代码名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.受纳水体代码,'',3) as 超标说明
from 
(
	select 企业代码,受纳水体代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select a.企业代码,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,a.企业类型,a.监测点代码,
		c.受纳水体代码,c.是否参与评价,a.污染物浓度,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+'-'+convert(varchar,a.监测月)+'-'+convert(varchar,a.监测日)) as 监测日期
		from 业务_废水监测数据 a join 业务_废水排口信息 c 
		on a.监测点代码=c.监测点代码 and a.企业代码=c.企业代码 and a.监测年=c.监测年 and a.企业类型=c.企业类型
	) as aa 
	where 企业类型=3 
	and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
	and 是否参与评价=1 and 监测年=@year and 季度=@Quarter and 企业代码=@EnterpriseCode
	group by 企业代码,受纳水体代码,监测年,季度,次数,监测日期
) as a  
inner join 系统_代码 d on 代码类型编码=16 and d.代码编码=a.受纳水体代码

--废气污染源达标评价
select a.监测年,a.季度,a.次数,a.监测日期,
case(sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染物浓度是否达标,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,'','',6) as 超标说明,
cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 达标率
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 监测点是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,基准浓度是否达标,企业类型,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据 
		where 企业类型=3 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@EnterpriseCode
	) as aa group by 企业代码,监测点代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
group by a.企业代码,a.监测年,a.季度,a.次数,a.监测日期
END


GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetSingleEnterWuRanYuan]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetSingleEnterWuRanYuan]
GO

--单个企业-污染源
--exec GetSingleEnterWuRanYuan 2011,4,'62040222476244-2'
CREATE proc [dbo].[GetSingleEnterWuRanYuan]
(
@year varchar(4),
@Quarter varchar(20),
@enterCode varchar(50)
)
as
begin
-- 0-1基本信息
select top 1 [详细名称] as 企业名称,b.[代码名称] as 行业,c.[代码名称] as 行政区,
[行政区代码],[法人代码],[企业代码],
(select [监测点名称]+' ' from dbo.业务_废气监测点信息 where 监测年=@year  and 业务_废气监测点信息.企业代码=a.企业代码 FOR XML PATH('')) as 废气监测点,
(select [监测点名称]+' ' from dbo.业务_无组织排放信息  where 监测年=@year  and 业务_无组织排放信息.企业代码=a.企业代码 FOR XML PATH('')) as 无组织排放监测点,
(select [监测点名称]+' ' from dbo.业务_废水排口信息  where 监测年=@year  and 业务_废水排口信息.企业代码=a.企业代码 FOR XML PATH('')) as 废水监测点
from dbo.业务_企业基本信息 a
inner join 系统_代码 b on b.代码编码=a.行业代码 and b.代码类型编码=15
inner join 系统_代码 c on c.代码编码=a.行政区代码 and c.代码类型编码=14
where 监测年=@year  and [企业代码]=@enterCode

--1-1手工监测-废水
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,
[监测点名称],[进口水量],[废水排放量],b.[代码名称] as 治理设施运行情况,[工况负荷],c.[监测项目名称],[废水处理设施进口浓度],[污染物浓度]  
from dbo.业务_废水监测数据 a 
left join 系统_代码 b on a.[治理设施是否正常运行]=b.代码编码 and b.代码类型编码=28 and a.企业类型=1
left join 系统_监测项目 c on c.监测项目编号=a.监测项目编号 
left join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.[企业代码]=@enterCode


--1-2手工监测-废气
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,处理设施前实测废气排放量,
废气排放量,测点温度,含氧量,日生产小时数,b.[代码名称] as 治理设施情况,工况负荷,c.[监测项目名称],处理设施前实测浓度,污染物实测浓度,污染物折算浓度
from dbo.业务_废气监测数据 a 
left join 系统_代码 b on a.[治理设施是否正常运行]=b.代码编码 and b.代码类型编码=28 and a.企业类型=1
left join 系统_监测项目 c on c.监测项目编号=a.监测项目编号 
left join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode


--1-3手工监测-废气无组织
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,监测项目名称,上风向监测值,下风向1监测值,下风向2监测值,下风向3监测值
from dbo.业务_废气无组织排放监测数据 a 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.企业类型=1 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode


--1-4手工监测-产品信息水
select Convert(varchar(10),year(填报日期))+'年'+Convert(varchar(10),Month(填报日期))+'月'+Convert(varchar(10),day(填报日期))+'日' as 监测日期,监测点名称,[排水量（t/d）] as 废水排放量,产品名称,[实际产品产量（t/d）] as 产品产量,单位产品基准排水量
from dbo.业务_废水单位产品基本信息 a 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode

--1-5手工监测-产品信息气
select Convert(varchar(10),year(填报日期))+'年'+Convert(varchar(10),Month(填报日期))+'月'+Convert(varchar(10),day(填报日期))+'日' as 监测日期,监测点名称,[排气量（m3/d）] as 废气排放量,产品名称,[实际产品产量（t/d）] as 产品产量,单位产品基准排气量 
from dbo.业务_废气单位产品基本信息 a 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode

--1-6手工监测-生产情况水
select a.监测年 as 年度,季,废水排口,生产总天数,生产总小时数,平均工况负荷,废水排放量,新鲜用水量 
from dbo.业务_企业季生产情况_废水 a 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and a.监测年=@year and 季=@Quarter and d.企业代码=@enterCode

--1-7手工监测-生产情况气
select 年,季,废气设备 as 废气排放设备,生产总天数,生产总小时数,平均工况负荷,废气排放量,燃料煤用量,燃料煤平均含硫量,燃料油用量,燃料油平均含硫量,燃料气耗量 
from dbo.业务_企业季生产情况 a 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.年=d.监测年
where d.监测年=@year and 季=@Quarter and d.企业代码=@enterCode

--1-8手工监测-煤含硫率
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,b.代码名称 as 燃煤种类,煤含硫率,灰份,水份,季度用煤总量 
from dbo.业务_煤含硫率 a 
inner join 系统_代码 b on a.燃煤种类代码=b.代码编码 and b.代码类型编码=36 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode

--2-1自动监测-废水
select * from (
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测点名称,废水排放量,b.[监测项目名称],c.监测设备名称,污染物浓度,
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_在线监测废水数据 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.企业类型=1
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year  and d.企业代码=@enterCode
) as a where 季度=@Quarter

--2-2自动监测-废气
select * from (
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测点名称,废气排放量,含氧量,b.[监测项目名称],c.[监测设备名称],污染物实测浓度,污染物折算浓度,
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_在线监测废气数据 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.企业类型=1
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and d.企业代码=@enterCode
) as a where 季度=@Quarter

--3-1比对监测-废水
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测分,监测点名称,b.[监测项目名称],c.[监测设备名称],手工监测数据,自动监测数据
from dbo.业务_废水在线比对 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode

--3-2比对监测-废气
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,监测时,监测分,监测点名称,b.[监测项目名称],c.[监测设备名称],手工监测数据,自动监测数据 
from dbo.业务_废气在线比对 a
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号
left join 业务_在线监测系统设备 c on a.监测设备ID=c.Id 
inner join dbo.业务_企业基本信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and 季度=@Quarter and d.企业代码=@enterCode

--废气监测点达标评价
select c.监测点名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.监测点代码,'',2) as 超标说明列
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,基准浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据  
		where 企业类型=1 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@enterCode
	) as aa group by 监测年,季度,次数,企业代码,监测点代码,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年 join 业务_废气监测点信息 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.监测点代码=c.监测点代码


--废水监测点达标评价
select c.监测点名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.监测点代码,'',1) as 超标说明列
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,污染物浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废水监测数据  
		where 企业类型=1 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@enterCode
	) as aa group by 企业代码,监测点代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年 join 业务_废水排口信息 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.监测点代码=c.监测点代码 
where c.是否参与评价=1

--废气排放设备达标评价
select c.排污设备名称,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.排污设备代码,'',4) as 超标说明列
from 
(
	select 企业代码,排污设备代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,排污设备代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据  
		where 企业类型=1 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@enterCode
	) as aa group by 企业代码,排污设备代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
join 业务_企业废气排放设备 c 
on a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.排污设备代码=c.排污设备代码

--废水污染源达标评价
select a.受纳水体代码,d.代码名称,a.监测年,a.季度,a.次数,a.监测日期,a.污染物浓度是否达标,达标率,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.受纳水体代码,'',3) as 超标说明列
from 
(
	select 企业代码,受纳水体代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 污染物浓度是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select a.企业代码,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,a.企业类型,a.监测点代码,
		c.受纳水体代码,c.是否参与评价,a.污染物浓度,a.排放上限,a.排放下限,
		convert(datetime,convert(varchar,a.监测年)+'-'+convert(varchar,a.监测月)+'-'+convert(varchar,a.监测日)) as 监测日期
		from 业务_废水监测数据 a join 业务_废水排口信息 c 
		on a.监测点代码=c.监测点代码 and a.企业代码=c.企业代码 and a.监测年=c.监测年 and a.企业类型=c.企业类型
	) as aa 
	where 企业类型=1 
	and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
	and 是否参与评价=1 and 监测年=@year and 季度=@Quarter and 企业代码=@enterCode
	group by 企业代码,受纳水体代码,监测年,季度,次数,监测日期
) as a  
inner join 系统_代码 d on 代码类型编码=16 and d.代码编码=a.受纳水体代码

--废气污染源达标评价
select a.监测年,a.季度,a.次数,
case(sum(cast(监测点是否达标 as int))-count(监测点是否达标)) when 0 then 1 else 0 end as 污染物浓度是否达标,
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,'','',6) as 超标说明列,
cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 达标率
from 
(
	select 企业代码,监测点代码,监测年,季度,次数,监测日期,
	case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
	when 0 then 1 else 0 end as 监测点是否达标,
	sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
	from 
	(
		select 企业代码,监测点代码,监测年,季度,次数,浓度是否达标 as 污染物浓度是否达标,基准浓度是否达标,企业类型,
		convert(datetime,convert(varchar,监测年)+'-'+convert(varchar,监测月)+'-'+convert(varchar,监测日)) as 监测日期
		from 业务_废气监测数据 
		where 企业类型=1 
		and (污染物浓度 is not null and (排放上限 is not null or 排放下限 is not null))
		and 监测年=@year and 季度=@Quarter and 企业代码=@enterCode
	) as aa group by 企业代码,监测点代码,监测年,季度,次数,监测日期
) as a join V_工业和固废企业 b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
group by a.企业代码,a.监测年,a.季度,a.次数,a.监测日期
end




GO


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetSingleEnterWuShuiChuLi]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetSingleEnterWuShuiChuLi]
GO

--2.单个企业-污水处理厂
--Exec GetSingleEnterWuShuiChuLi 2011,1,'13010123601620-1'
CREATE proc [dbo].[GetSingleEnterWuShuiChuLi]
(
@year varchar(4),
@Quarter varchar(20),
@enterCode varchar(50)
)
as
begin
-- 0-1基本信息
select top 1 [详细名称] as 企业名称,'污水处理' as 行业,c.[代码名称] as 行政区,
[行政区代码],[法人代码],[企业代码],污水处理级别,b.[代码名称] as 受纳水体,设计处理能力
from dbo.业务_污水处理厂信息 a 
inner join 系统_代码 b on b.代码编码=a.受纳水体代码
inner join 系统_代码 c on c.代码编码=a.行政区代码 and c.代码类型编码=14
where 监测年=@year and 企业代码=@enterCode

--4-1手工监测-监测数据
select (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,b.监测项目名称,进口污染物浓度,进口水量,进口污染物量,出口污染物浓度,出口水量,出口污染物排放量,出口在线监测浓度,出口在线监测排放量
from dbo.业务_污水处理厂监测数据 a 
left join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.季度=@Quarter
left join 业务_污水处理厂信息 c on a.企业代码=c.企业代码 and a.监测年=c.监测年
where c.监测年=@year and 季度=@Quarter and c.企业代码=@enterCode 

--4-2手工监测-月累计水量
select * from (
select a.监测年,监测月,进水量,排水量, 
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from dbo.业务_污水处理厂月水量 a
inner join 业务_污水处理厂信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where b.监测年=@year and b.企业代码=@enterCode
) as a where 季度=@Quarter

--5-1自动监测-自动监测数据
select * from (
select  (Convert(varchar(10),a.监测年)+'年'+Convert(varchar(10),监测月)+'月'+Convert(varchar(10),监测日))+'日' as 监测日期,b.监测项目名称,c.监测设备名称,污染物浓度,废水排放量,
case when 监测月 in (1,2,3) then 1
when 监测月 in (4,5,6) then 2
when 监测月 in (7,8,9) then 3
when 监测月 in (10,11,12) then 4 end 季度
from 业务_在线监测废水数据 a 
inner join 系统_监测项目 b on a.监测项目编号=b.监测项目编号 and a.企业类型=2
left join dbo.业务_在线监测系统设备 c on a.监测设备ID=c.ID
inner join 业务_污水处理厂信息 d on a.企业代码=d.企业代码 and a.监测年=d.监测年
where d.监测年=@year and d.企业代码=@enterCode
) as a where 季度=@Quarter

--6-1比对废水监测数据-自动监测设备比对数据 
select convert(datetime,convert(varchar,a.监测年)+'-'+convert(varchar,a.监测月)+'-'+convert(varchar,a.监测日)) as 监测日期,
a.监测时,a.监测分,a.监测点名称,b.监测设备名称,a.手工监测数据,a.自动监测数据
from 业务_废水在线比对 a left join 业务_在线监测系统设备 b on a.监测设备ID=b.id
where a.监测年=@year and 季度=@Quarter and a.企业代码=@enterCode

--达标评价
select d.代码名称 as 受纳水体,a.监测年,a.季度,a.次数,a.污染物浓度是否达标,a.达标率,  
dbo.GetOverStandardDesc(1,a.监测年,a.季度,a.次数,a.监测日期,a.企业代码,a.受纳水体代码,'',5) as 超标说明
from 
(
 select 受纳水体代码,监测年,季度,次数,企业代码,监测日期,
 case(sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标))
 when 0 then 1 else 0 end as 污染物浓度是否达标,
 sum(cast(污染物浓度是否达标 as decimal(18,2)))/count(污染物浓度是否达标) 达标率
 from 
 (
  select a.监测年,a.季度,a.次数,a.出口污染物浓度 as 污染物浓度,a.企业代码,
  a.浓度是否达标 as 污染物浓度是否达标,b.受纳水体代码,
  convert(datetime,convert(varchar,a.监测年)+'-'+convert(varchar,a.监测月)+'-'+convert(varchar,a.监测日)) as 监测日期
  from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
  on a.企业代码=b.企业代码 and a.监测年=b.监测年
  where a.监测年=@year and 季度=@Quarter and a.企业代码=@enterCode
  and (a.出口污染物浓度 is not null and (a.排放上限 is not null or a.排放下限 is not null))
 ) as aa group by 企业代码,受纳水体代码,监测年,季度,次数,监测日期
) a
join (select 代码编码,代码名称 from dbo.系统_代码 where 代码类型编码=16) d 
on a.受纳水体代码=d.代码编码 

END


GO


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetJianCeJieGuo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetJianCeJieGuo]
GO

/****** Object:  StoredProcedure [dbo].[GetJianCeJieGuo]    Script Date: 12/01/2011 21:49:16 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- exec [GetJianCeJieGuo] '2010',1,'110000'
-- exec [GetJianCeJieGuo] '2010',2,'110000'
CREATE proc [dbo].[GetJianCeJieGuo]
(
@year varchar(4),
@reportType int,
@AreaCode varchar(max)
)
as
begin
if @AreaCode != ''
set @AreaCode = ' and 行政区代码 in ('+@AreaCode+')'
declare @select varchar(8000)

if @reportType=1
begin 
--11、COD排放严重超标的国控企业名单及监测结果
--============================================================
set @select ='select bbb.代码名称 as 省份,ccc.代码名称 as 地市,aaa.* from (
select substring(b.行政区代码,1,2)+''0000'' as 省级行政区代码,b.行政区代码,b.详细名称,监测点代码,监测点名称,
a.监测年,a.监测月,a.监测日,a.污染物浓度 ,dbo.GetStarndardRange(a.排放下限,a.排放上限) as 标准限值,c.监测项目名称,
dbo.GetOverStarndardNum(a.污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数   
from dbo.业务_废水监测数据 as a
inner join dbo.V_工业和固废企业 as b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年 
join 系统_监测项目 c on a.监测项目编号=c.监测项目编号 
where a.监测项目编号=''W_11'' and c.监测项目类别编号=1
and (b.污染源控制级别代码=''1'' or b.污染源控制级别代码气=''1'')
) as aaa left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as bbb on aaa.省级行政区代码=bbb.代码编码
left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as ccc on aaa.行政区代码=ccc.代码编码
where 超标倍数>''0.3'' and 监测年='+@year+@AreaCode+' 
order by 省级行政区代码,行政区代码,监测年 desc,监测月 desc,监测日 desc'
end
if @reportType=2
begin
--12、二氧化硫排放严重超标的国控企业名单及监测结果
--=============================================================
set @select ='select bbb.代码名称 as 省份,ccc.代码名称 as 地市,aaa.* from (
select substring(b.行政区代码,1,2)+''0000'' as 省级行政区代码,b.行政区代码,b.详细名称,监测点代码,监测点名称,a.监测年,a.监测月,a.监测日,a.污染物浓度 as 折算浓度,dbo.GetStarndardRange(a.排放下限,a.排放上限) as 标准限值,dbo.GetOverStarndardNum(a.污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数   from dbo.业务_废气监测数据 as a
inner join dbo.V_工业和固废企业 as b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
and (b.污染源控制级别代码=''1'' or b.污染源控制级别代码气=''1'')
where 监测项目编号=''G_2'' ) as aaa left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as bbb on aaa.省级行政区代码=bbb.代码编码
left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as ccc on aaa.行政区代码=ccc.代码编码
where 超标倍数>''0.3'' and 监测年='+@year+@AreaCode+'   order by 省级行政区代码,行政区代码,监测年 desc,监测月 desc,监测日 desc'
end
if @reportType=3
begin
--13、COD排放严重超标的污水处理厂名单及监测结果
--=============================================================
set @select ='select bbb.代码名称 as 省份,ccc.代码名称 as 地市,aaa.* from (
select substring(b.行政区代码,1,2)+''0000'' as 省级行政区代码,b.行政区代码,b.详细名称,a.监测年,a.监测月,a.监测日,a.进口污染物浓度,a.出口污染物浓度,dbo.GetStarndardRange(a.排放下限,a.排放上限) as 标准限值,dbo.GetOverStarndardNum(a.出口污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数   from dbo.业务_污水处理厂监测数据 as a
inner join dbo.业务_污水处理厂信息 as b 
on a.企业代码=b.企业代码 and a.监测年=b.监测年
where 监测项目编号=''W_11'' and b.控制级别代码=1 ) as aaa left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as bbb on aaa.省级行政区代码=bbb.代码编码
left join (select * from dbo.系统_代码 where 代码类型编码=''14'') as ccc on aaa.行政区代码=ccc.代码编码
where 超标倍数>''0.3'' and 监测年='+@year+@AreaCode+' order by 省级行政区代码,行政区代码,监测年 desc,监测月 desc,监测日 desc'
end
exec (@select)
end



GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetCheckReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
	drop procedure [dbo].[GetCheckReport]
go

CREATE proc [dbo].[GetCheckReport]  
(
@year int,
@Quarter int,
@TableType int,
@XingZhengQuCode varchar(max),
@IsOver varchar(50)
)
as
begin
	declare @select varchar(5000)
	if @XingZhengQuCode<>'' 
	begin
		set @XingZhengQuCode = 'and c.行政区代码 in ('+@XingZhengQuCode+')'
	end
	if(@IsOver<>'')
	begin
		if(@TableType=1)
		begin
			set @IsOver=' and 污染物浓度是否达标='+@IsOver
		end
		if(@TableType=2 or @TableType=3 or @TableType=4)
		begin
			set @IsOver=' and 浓度是否达标='+@IsOver
		end
		if(@TableType=5)
		begin
			set @IsOver=' and 系统是否达标='+@IsOver
		end
		if(@TableType=6 or @TableType=7)
		begin
			set @IsOver=' where 监测系统是否合格='+@IsOver
		end
	end
if @TableType=1
begin
		--审核表(废水)
	set @select ='select c.行政区,b.详细名称,d.行业,f.受纳水体,e.监测点名称,g.标准名称 as 执行标准名称,
		a.执行标准代码,a.执行标准条件代码,a.监测年,a.监测月,a.监测日,b.行政区代码,b.企业代码,b.行业代码,e.受纳水体代码,
		a.工况负荷 as 生产负荷,a.废水排放量 as 监测点流量,h.监测项目名称,a.污染物浓度,
		a.排放上限,a.排放下限,a.排放单位,a.污染物浓度是否达标,a.监测项目编号,'''' as [备注]
		into #temp from 业务_废水监测数据 a join V_工业和固废企业_简单 b
		on a.企业代码=b.企业代码 and a.监测年=b.监测年 and a.企业类型=b.企业类型
		join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on b.行政区代码=c.行政区代码 
		join (select 代码编码 as 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) d
		on b.行业代码=d.行业代码
		join 业务_废水排口信息 e 
		on a.监测年=e.监测年 and a.企业代码=e.企业代码 and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型 
		join (select 代码编码 as 受纳水体代码,代码名称 as 受纳水体 from 系统_代码 where 代码类型编码=16) f
		on e.受纳水体代码=f.受纳水体代码
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+' 
		and (a.污染物浓度 is not null and a.排放上限 is not null) and e.是否参与评价=1 
		and b.污染源控制级别代码=1 and h.监测项目类别编号=1 '+ @XingZhengQuCode + @IsOver +';
		select 行政区,详细名称,行业,受纳水体,监测点名称,执行标准名称,
		dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期,
		生产负荷,监测点流量,监测项目名称,污染物浓度,
		dbo.GetStarndardRange(排放上限,排放下限) as 标准限值,排放单位,污染物浓度是否达标,
		dbo.GetOverStarndardNum(污染物浓度,排放下限,排放上限,监测项目编号) as 超标倍数,备注 from #temp 
		order by 行政区代码,企业代码,行业代码,受纳水体代码,监测年,监测月,监测日'
end
if @TableType=2
begin
		--审核表(废气)
	set @select='select c.行政区,b.详细名称,d.行业,e.监测点名称,g.标准名称 as 执行标准名称,b.行政区代码,b.企业代码,b.行业代码,
		a.执行标准代码,a.执行标准条件代码,a.监测年,a.监测月,a.监测日,a.污染物浓度,a.监测项目编号,
		a.工况负荷,a.废气排放量 as 流量,a.测点温度 as 烟气温度,a.含氧量,h.监测项目名称,
		a.污染物实测浓度 as 实测浓度,a.污染物浓度 as 折算浓度,a.排放上限,a.排放下限,a.浓度是否达标,'''' as [备注]
		into #temp from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.企业代码=b.企业代码 and a.监测年=b.监测年 and a.企业类型=b.企业类型
		join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on b.行政区代码=c.行政区代码 
		join (select 代码编码 as 行业代码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) d
		on b.行业代码=d.行业代码
		join 业务_废气监测点信息 e 
		on a.监测年=e.监测年 and a.企业代码=e.企业代码 and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型 
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+' 
		and (a.污染物浓度 is not null and a.排放上限 is not null) 
		and b.污染源控制级别代码=1 and h.监测项目类别编号=2 '+ @XingZhengQuCode + @IsOver +';
		select 行政区,详细名称,行业,监测点名称,执行标准名称,
		dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期,
		工况负荷,流量,烟气温度,含氧量,监测项目名称,实测浓度,折算浓度,
		dbo.GetStarndardRange(排放上限,排放下限) as 标准限值,浓度是否达标,
		dbo.GetOverStarndardNum(污染物浓度,排放下限,排放上限,监测项目编号) as 超标倍数,备注 from #temp
		order by 行政区代码,企业代码,行业代码,监测年,监测月,监测日 '
end
if @TableType=3
begin

		--审核表(污水处理厂)
	set @select = 'select c.行政区,b.详细名称,f.受纳水体,a.监测年,a.监测月,a.监测日,b.行政区代码,b.企业代码,b.受纳水体代码,
		g.标准名称 as 执行标准名称,a.执行标准代码,a.执行标准条件代码,a.监测项目编号,
		b.设计处理能力 as 设计日处理量,a.进口水量,a.出口水量,h.监测项目名称,
		a.进口污染物浓度,a.出口污染物浓度,a.排放上限,a.排放下限,a.浓度是否达标,'''' as [备注]
		into #temp from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
		on a.企业代码=b.企业代码 and a.监测年=b.监测年
		join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on b.行政区代码=c.行政区代码  
		join (select 代码编码 as 受纳水体代码,代码名称 as 受纳水体 from 系统_代码 where 代码类型编码=16) f
		on b.受纳水体代码=f.受纳水体代码
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+' 
		and (a.出口污染物浓度 is not null and a.排放上限 is not null) 
		and h.监测项目类别编号=1 '+ @XingZhengQuCode + @IsOver +';
		select 行政区,详细名称,受纳水体,
		convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期,
		执行标准名称,dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		设计日处理量,进口水量,出口水量,监测项目名称,
		进口污染物浓度,出口污染物浓度,dbo.GetStarndardRange(排放上限,排放下限) as 标准限值,浓度是否达标,
		dbo.GetOverStarndardNum(出口污染物浓度,排放下限,排放上限,监测项目编号) as 超标倍数,备注 from #temp'
end
if @TableType=4
begin
		--审核表(火电废气(省))
	set @select =	'select c.行政区,b.详细名称,e.监测点名称,g.标准名称 as 执行标准名称,
		dbo.GetAllStandardConditions(a.执行标准代码,a.执行标准条件代码) as 执行标准条件名称,
		convert(datetime,convert(varchar,a.监测年)+''-''+convert(varchar,a.监测月)+''-''+convert(varchar,a.监测日)) as 监测日期,
		a.工况负荷,a.废气排放量 as 流量,a.测点温度 as 烟气温度,a.含氧量,h.监测项目名称,
		a.污染物实测浓度 as 实测浓度,a.污染物浓度 as 折算浓度,dbo.GetStarndardRange(a.排放上限,a.排放下限) as 标准限值,a.浓度是否达标,
		dbo.GetOverStarndardNum(a.污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数,'''' as [备注]
		from 业务_废气监测数据 a join V_工业和固废企业_简单 b
		on a.企业代码=b.企业代码 and a.监测年=b.监测年 and a.企业类型=b.企业类型
		join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on substring(b.行政区代码,1,2)+''0000''=c.行政区代码 
		join 业务_废气监测点信息 e 
		on a.监测年=e.监测年 and a.企业代码=e.企业代码 and a.监测点代码=e.监测点代码 and a.企业类型=e.企业类型 
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+' 
		and (a.污染物浓度 is not null and a.排放上限 is not null) 
		and b.污染源控制级别代码=1 and h.监测项目类别编号=2
		and b.行业代码=''4411'' ' +@XingZhengQuCode+ @IsOver + --and c.行政区代码 in (@XingZhengQuCode)
		' order by c.行政区代码,a.企业代码,a.监测年,a.监测月,a.监测日 '
end
if @TableType=5
begin
		--审核表(在线废气)
	set @select = 
	'select 企业代码,监测点代码,监测系统ID,监测年,次数,a.监测项目编号,b.监测项目名称,max(监测日期) as 监测日期,avg(手工监测数据) as 手工监测数据,avg(自动监测数据) as 自动监测数据,avg(比对结果) as 比对结果,
	case when sum(是否达标)-count(是否达标)=0 then 1 else 0 end as 是否达标,单位,评判标准
	into #t from 业务_废气在线比对_次达标情况 as a
	inner join
	(
		select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
		where 水气类别=''Gas'' and 主体类别=''BD''
	) b on a.监测项目编号=b.监测项目编码
	where 监测系统ID is not null and 监测年='+convert(varchar(4),@year)+' and 季度='+convert(varchar(1),@Quarter)+' 
	group by 企业代码,监测点代码,监测系统ID,监测年,次数,监测项目编号,b.监测项目名称,单位,评判标准;
	select a.企业代码,a.监测点代码,监测点名称,a.监测系统ID,a.监测年,a.次数,监测项目编号,监测项目名称,监测日期,手工监测数据,自动监测数据,a.是否达标,系统是否达标,评判标准,
	case when 监测项目编号=''G_1'' or 监测项目编号=''G_2'' or 监测项目编号=''G_3'' or 监测项目编号=''G_39'' then ''mg/m3'' when 监测项目编号=''含氧量'' then ''%'' 
		 when 监测项目编号=''烟气温度'' then ''°C'' when 监测项目编号=''流速'' then ''m/s'' else '''' end as 单位,
		 cast(cast(比对结果 as decimal(18,2)) as nvarchar)+单位 as 比对结果
	into #temp from #t a inner join 业务_废气监测点信息 as b
	on a.企业代码=b.企业代码 and a.监测点代码=b.监测点代码 and a.监测年=b.监测年
	inner join 
	(
		select 监测年,次数,企业代码,监测点代码,监测系统ID,
		case when sum(是否达标)-count(是否达标)=0 then 1 else 0 end as 系统是否达标 
		from #t group by 监测年,次数,企业代码,监测点代码,监测系统ID
	) as c on a.监测系统ID=c.监测系统ID and a.监测年=c.监测年 and a.企业代码=c.企业代码 and a.次数=c.次数; 
	select c.行政区,b.详细名称,a.监测点名称,e.安装位置,e.集成厂家,e.监测系统型号,d.监测设备型号,d.设备生产厂家,d.监测原理,
	a.监测日期,a.监测项目名称,a.手工监测数据,a.自动监测数据,a.单位,a.比对结果,a.评判标准,a.是否达标,a.系统是否达标
	from #temp a 
	join V_工业和固废企业_简单 b
	on a.企业代码=b.企业代码 and a.监测年=b.监测年
	join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
	on b.行政区代码=c.行政区代码 
	join 业务_在线监测系统 e on a.监测系统ID=e.id
	join 业务_在线监测系统_项目 d on d.监测系统ID号=e.id and a.监测项目编号=d.监测项目编号
	where b.污染源控制级别代码气=1 '+@XingZhengQuCode+ @IsOver +' 
	order by c.行政区代码,a.企业代码,a.监测点代码,a.监测年,a.次数,a.监测日期'
end
if @TableType=6
begin
		--审核表(在线废水)
	set @select=
		'select a.监测年,a.季度,次数,b.行政区代码,c.行政区,b.详细名称,a.企业代码,a.监测系统ID,a.监测项目编号,e.监测系统名称,监测日期,
		a.监测点名称,e.安装位置,e.监测系统型号,e.集成厂家,f.监测原理,f.监测设备型号,f.设备生产厂家,a.是否达标,a.数据类型编码,手工监测数据,自动监测数据,
		cast(cast(a.比对结果 as decimal(18,2)) as nvarchar)+a.单位 as 比对结果,a.单位,a.评价标准
		into #t from 
		(
			select 企业类型,企业代码,监测项目编号,监测系统ID,监测设备ID,手工监测数据,自动监测数据,监测点名称,比对结果,评价标准,监测年,次数,单位,监测点代码,是否达标,数据类型编码,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期,
			case when 监测月 in (1,2,3) then 1
			when 监测月 in (4,5,6) then 2
			when 监测月 in (7,8,9) then 3
			when 监测月 in (10,11,12) then 4 end 季度
			from 业务_废水在线比对
		) as a 
		inner join V_工业和固废企业_简单 b on a.监测年=b.监测年 and a.企业代码=b.企业代码 and a.企业类型=b.企业类型
		inner join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on b.行政区代码=c.行政区代码
		inner join
		(
			select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
			where 水气类别=''Water'' and 主体类别=''BD''
		) d on a.监测项目编号=d.监测项目编码
		inner join 业务_在线监测系统 as e on a.监测系统ID=e.id
		inner join 业务_在线监测系统_项目 as f on e.id=f.监测系统ID号 and a.监测项目编号=f.监测项目编号
		where a.监测系统ID is not null and 数据类型编码 is not null and b.污染源控制级别代码=1
		and a.企业类型<>2 and a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+ @XingZhengQuCode+';
		select 监测年,季度,企业代码,监测系统ID,监测项目编号,次数,
		case when COD替代次数>0 and COD替代合格次数=COD替代次数 and 质控样合格次数=质控样次数 then 1
		when COD替代次数=0 and 质控样合格次数>=2 and 实际样品合格次数>=2 then 1 else 0 end as 监测系统是否合格
		into #t2 from
		(
			select 监测年,季度,企业代码,监测系统ID,监测项目编号,次数,
			sum(case when 数据类型编码=1 then 1 else 0 end) as 实际样品次数,
			sum(case when 数据类型编码=1 then 是否达标 else 0 end) as 实际样品合格次数,
			sum(case when 数据类型编码=2 then 1 else 0 end) as 质控样次数,
			sum(case when 数据类型编码=2 then 是否达标 else 0 end) as 质控样合格次数,
			sum(case when 数据类型编码=3 then 1 else 0 end) as COD替代次数,
			sum(case when 数据类型编码=3 then 是否达标 else 0 end) as COD替代合格次数
			from #t group by 监测年,季度,企业代码,监测系统ID,监测项目编号,次数
		) as t;
		select a.*,b.监测系统是否合格,
		case when a.监测项目编号=''W_11'' or a.监测项目编号=''W_60'' or a.监测项目编号=''W_101'' or a.监测项目编号=''W_61'' then ''mg/L''
			 when a.监测项目编号=''W_1'' then ''无量纲'' else '''' end as 监测项目名称
		from #t as a inner join #t2 as b 
		on a.监测系统ID=b.监测系统ID and a.监测项目编号=b.监测项目编号 and a.季度=b.季度 and a.次数=b.次数'+ @IsOver+'
		order by 行政区代码,企业代码,监测点名称,监测年,次数,监测日期'
end
if @TableType=7
begin
	--审核表(在线污水处理厂)
	set @select = 'select a.监测年,a.季度,次数,b.行政区代码,c.行政区,b.详细名称,a.企业代码,a.监测系统ID,a.监测项目编号,e.监测系统名称,监测日期,
		a.监测点名称,e.安装位置,e.监测系统型号,e.集成厂家,f.监测原理,f.监测设备型号,f.设备生产厂家,a.是否达标,a.数据类型编码,手工监测数据,自动监测数据,
		cast(cast(a.比对结果 as decimal(18,2)) as nvarchar)+a.单位 as 比对结果,a.单位,a.评价标准
		into #t from 
		(
			select 企业类型,企业代码,监测项目编号,监测系统ID,监测设备ID,手工监测数据,自动监测数据,'''' as 监测点名称,
			比对结果,评价标准,监测年,次数,单位,监测点代码,是否达标,数据类型编码,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期,
			case when 监测月 in (1,2,3) then 1
			when 监测月 in (4,5,6) then 2
			when 监测月 in (7,8,9) then 3
			when 监测月 in (10,11,12) then 4 end 季度
			from 业务_废水在线比对
		) as a 
		inner join 业务_污水处理厂信息 b on a.监测年=b.监测年 and a.企业代码=b.企业代码
		inner join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
		on b.行政区代码=c.行政区代码
		inner join
		(
			select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
			where 水气类别=''Water'' and 主体类别=''BD''
		) d on a.监测项目编号=d.监测项目编码
		inner join 业务_在线监测系统 as e on a.监测系统ID=e.id
		inner join 业务_在线监测系统_项目 as f on e.id=f.监测系统ID号 and a.监测项目编号=f.监测项目编号
		where a.监测系统ID is not null and 数据类型编码 is not null
		and a.企业类型=2 and a.监测年='+convert(varchar(4),@year)+' and a.季度='+convert(varchar(1),@Quarter)+ @XingZhengQuCode +';
		select 监测年,季度,企业代码,监测系统ID,监测项目编号,次数,
		case when COD替代次数>0 and COD替代合格次数=COD替代次数 and 质控样合格次数=质控样次数 then 1
		when COD替代次数=0 and 质控样合格次数>=2 and 实际样品合格次数>=2 then 1 else 0 end as 监测系统是否合格
		into #t2 from
		(
			select 监测年,季度,企业代码,监测系统ID,监测项目编号,次数,
			sum(case when 数据类型编码=1 then 1 else 0 end) as 实际样品次数,
			sum(case when 数据类型编码=1 then 是否达标 else 0 end) as 实际样品合格次数,
			sum(case when 数据类型编码=2 then 1 else 0 end) as 质控样次数,
			sum(case when 数据类型编码=2 then 是否达标 else 0 end) as 质控样合格次数,
			sum(case when 数据类型编码=3 then 1 else 0 end) as COD替代次数,
			sum(case when 数据类型编码=3 then 是否达标 else 0 end) as COD替代合格次数
			from #t group by 监测年,季度,企业代码,监测系统ID,监测项目编号,次数
		) as t;
		select a.*,b.监测系统是否合格,
		case when a.监测项目编号=''W_11'' or a.监测项目编号=''W_60'' or a.监测项目编号=''W_101'' or a.监测项目编号=''W_61'' then ''mg/L''
			 when a.监测项目编号=''W_1'' then ''无量纲'' else '''' end as 监测项目名称
		from #t as a inner join #t2 as b 
		on a.监测系统ID=b.监测系统ID and a.监测项目编号=b.监测项目编号 and a.季度=b.季度 and a.次数=b.次数'+ @IsOver+'
		order by 行政区代码,企业代码,监测点名称,监测年,次数,监测日期'
end
exec  (@select)
end

GO


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetChuLiForJianCeXiangMu]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetChuLiForJianCeXiangMu]
GO

/****** Object:  StoredProcedure [dbo].[GetChuLiForJianCeXiangMu]    Script Date: 12/01/2011 12:00:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- exec [GetChuLiForJianCeXiangMu] '2011','4'
CREATE proc [dbo].[GetChuLiForJianCeXiangMu]
(
@year varchar(4),
@Quarter varchar(4)
)
as
begin

declare @lastyear int
set @lastyear=convert(int,@year)-1

select t0.监测项目编号,t0.监测项目名称 as 监测项目,t1.企业数量 as 监测污水厂数,
t1.达标率 as 本季度达标率, t2.达标率 as 同期达标率,t3.平均超标倍数 from
(
	select 监测项目编号,监测项目名称 from dbo.系统_监测项目 where 监测项目类别编号=1
) t0
left join 
(
	select 监测项目编号,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
	from 
	(	/*计算某季度，某企业达标率*/
		select 季度,监测项目编号,企业代码,
		cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 污染源达标率
		from 
		(	
			select 季度,次数,监测项目编号,企业代码,
			case (sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标)) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.监测年,a.季度,a.次数,a.企业代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标 
				from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
				on a.监测年=b.监测年 and a.企业代码=b.企业代码
				where a.监测年=@year and a.季度=@Quarter
			)a 
			group by 季度,次数,监测项目编号,企业代码
		) a group by 季度,监测项目编号,企业代码
	) a group by 季度,监测项目编号
 ) t1 on t0.监测项目编号=t1.监测项目编号
left join 
(
	select 监测项目编号,季度,count(企业代码) as 企业数量,avg(污染源达标率) 达标率 
	from 
	(	/*计算某季度，某企业达标率*/
		select 季度,监测项目编号,企业代码,
		cast(sum(监测点是否达标) as decimal(18,2))/count(监测点是否达标) as 污染源达标率
		from 
		(	
			select 季度,次数,监测项目编号,企业代码,
			case (sum(cast(污染物浓度是否达标 as int))-count(污染物浓度是否达标)) when 0 then 1 else 0 end as 监测点是否达标
			from 
			(
				select a.监测年,a.季度,a.次数,a.企业代码,a.监测项目编号,
				a.浓度是否达标 as 污染物浓度是否达标 
				from 业务_污水处理厂监测数据 a join 业务_污水处理厂信息 b
				on a.监测年=b.监测年 and a.企业代码=b.企业代码
				where a.监测年=@lastyear and a.季度=@Quarter
			)a 
			group by 季度,次数,监测项目编号,企业代码
		) a group by 季度,监测项目编号,企业代码
	) a group by 季度,监测项目编号 
) t2 on (t0.监测项目编号=t2.监测项目编号)
left join
(
	select 监测项目编号,case when 平均超标倍数>10 then cast(cast(Round(平均超标倍数,0) as float) as varchar)
							  when 平均超标倍数>0.1 then cast(cast(Round(平均超标倍数,1) as float) as varchar)
							  when 平均超标倍数>0.01 then cast(cast(Round(平均超标倍数,2) as float) as varchar)
							  else '0' end as 平均超标倍数 from 
	(
	select 监测项目编号,avg(超标倍数) as 平均超标倍数
	from 
	(
		select 监测项目编号,case 超标倍数 when '' then 0 else convert(float,超标倍数) end as 超标倍数
		from
		(
			select a.监测项目编号,dbo.GetOverStarndardNum(a.出口污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数
			from 业务_污水处理厂监测数据 a
			join 业务_污水处理厂信息 b on a.监测年=b.监测年 and a.企业代码=b.企业代码
			where a.监测年=@year and a.季度=季度 and b.控制级别代码=1
		) as a
	 ) as a where 超标倍数>0
	 group by 监测项目编号
	) as a
) t3 on (t0.监测项目编号=t3.监测项目编号)
order by 监测项目编号
end 

GO







