--修改监测项目
update 系统_监测项目 set 监测项目类别编号=2 where 监测项目名称 in ('含氧量','流速')
if not exists(select * from 系统_监测项目 where 监测项目编号='温度' and 监测项目类别编号=1 and 监测项目名称='温度')
begin
	insert into 系统_监测项目(监测项目类别编号,监测项目编号,监测项目名称)
	values(1,'温度','温度')
end
go
if not exists(select * from 系统_监测项目 where 监测项目编号='烟气温度' and 监测项目类别编号=2 and 监测项目名称='烟气温度')
begin
	insert into 系统_监测项目(监测项目类别编号,监测项目编号,监测项目名称)
	values(2,'烟气温度','烟气温度')
end
go
--新增监测项目"甲苯及二甲苯合计"和"烟气湿度"
if not exists(select * from 系统_监测项目 where 监测项目编号='G_1718' and 监测项目类别编号=2 and 监测项目名称='甲苯及二甲苯合计')
begin
	insert into 系统_监测项目(监测项目类别编号,监测项目编号,监测项目名称)
	values(2,'G_1718','甲苯及二甲苯合计')
end
go
if not exists(select * from 系统_监测项目 where 监测项目编号='烟气湿度' and 监测项目类别编号=2 and 监测项目名称='烟气湿度')
begin
	insert into 系统_监测项目(监测项目类别编号,监测项目编号,监测项目名称)
	values(2,'烟气湿度','烟气湿度')
end
go
--修改业务_抽测比对评价项目中的监测项目名称“温度”
if exists(select * from 业务_抽测比对评价项目 where 监测项目编码='温度' and 水气类别='Gas' and 监测项目名称='温度')
begin
	update 业务_抽测比对评价项目 set 监测项目编码='烟气温度',监测项目名称='烟气温度' where 监测项目编码='温度' and 水气类别='Gas'
end
go

--更新业务_废气在线比对数据类型编码为质控样
update 业务_废气在线比对 set 数据类型编码=1 where 监测年<=2011 and 数据类型编码 is null
go

--新增数据类型
if not exists(select * from 系统_代码 where 代码类型编码='37' and 代码编码=3)
begin
	insert into 系统_代码(代码类型编码,代码编码,代码名称) values(37,'3','低浓度COD替代样')
end
go

--将历史数据中自定义属性为空的赋值为"无"
update 业务_企业基本信息 set 自定义属性=9 where 自定义属性 is null or 自定义属性=''


--解决监测点排放标准未能导入问题
if exists (select 1 from sysobjects where id = object_id('业务_企业监测点执行标准') and type = 'U')
begin
	if not exists (select 1 from sysobjects where id = object_id('Temp_业务_企业监测点执行标准') and type = 'U')
	begin
		create table Temp_业务_企业监测点执行标准
		(
			ID varchar(50) default(newid()) not null,
			监测年 int not null,
			企业代码 varchar(50) not null,
			企业类型 char(1) not null,
			监测点代码 varchar(50) not null,
			监测点名称 varchar(200) not null,
			起始日期 smalldatetime default getdate() not null,
			结止日期 smalldatetime default getdate() not null,
			执行标准名称 varchar(200) null,
			执行标准代码 varchar(50) null,
			执行标准条件代码 varchar(50) null,
		) 
	end
	insert into Temp_业务_企业监测点执行标准 select * from 业务_企业监测点执行标准
	drop table 业务_企业监测点执行标准
	exec sp_rename 'Temp_业务_企业监测点执行标准','业务_企业监测点执行标准','object'
	alter table 业务_企业监测点执行标准 add constraint PK_业务_企业监测点执行标准 PRIMARY KEY (监测年,企业代码,企业类型,监测点代码,监测点名称,起始日期,结止日期)
end 
go

if exists (select 1 from sysobjects where id = object_id('业务_企业监测项目时间段') and type = 'U')
begin
	if not exists (select 1 from sysobjects where id = object_id('Temp_业务_企业监测项目时间段') and type = 'U')
	begin
		create table Temp_业务_企业监测项目时间段
		(
			ID varchar(50) default(newid()) not null,
			监测年 int not null,
			企业代码 varchar(50) not null,
			企业类型 char(1) not null,
			监测点代码 varchar(50) not null, 
			监测点名称 varchar(200) not null, 
			监测项目编号 varchar(50) not null,
			起始日期 smalldatetime default getdate() not null,
			结止日期 smalldatetime default getdate() not null,
			执行标准代码 varchar(50) null,
			执行标准条件代码 varchar(50) null,
		) 
	end
	insert into Temp_业务_企业监测项目时间段 select * from 业务_企业监测项目时间段
	drop table 业务_企业监测项目时间段
	exec sp_rename 'Temp_业务_企业监测项目时间段','业务_企业监测项目时间段','object'
	alter table 业务_企业监测项目时间段 add constraint PK_业务_企业监测项目时间段 primary key(监测年,企业代码,企业类型,监测点代码,监测点名称,起始日期,结止日期,监测项目编号)
end 
go


GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_工业和固废企业]'))
DROP VIEW [dbo].[V_工业和固废企业]
GO

--修改视图[V_工业和固废企业]
CREATE VIEW [dbo].[V_工业和固废企业]
AS
select a.监测年,a.行政区代码,a.企业代码,a.行业代码,a.详细名称,a.污染源控制级别代码,
a.污染源控制级别代码气,a.企业类型,d.行政区,e.行业,f.废水控制级别,g.废气控制级别,a.自定义属性
from 
(
	select 监测年,行政区代码,企业代码,行业代码,详细名称,污染源控制级别代码,污染源控制级别代码气,自定义属性,1 as 企业类型
	from 业务_企业基本信息
	union all
	select 监测年,行政区代码,企业代码,'8024' as 行业代码,详细名称,控制级别代码 as 污染源控制级别代码,控制级别代码 as 污染源控制级别代码气,'',3 as 企业类型
	from 业务_固废处理厂信息
) as a
join (select 代码编码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) d
on a.行政区代码=d.代码编码
join (select 代码编码,代码名称 as 行业 from 系统_代码 where 代码类型编码=15) e
on a.行业代码=e.代码编码
join (select 代码编码,代码名称 as 废水控制级别 from 系统_代码 where 代码类型编码=6) f
on a.污染源控制级别代码= f.代码编码
join (select 代码编码,代码名称 as 废气控制级别 from 系统_代码 where 代码类型编码=6) g
on a.污染源控制级别代码气= g.代码编码

GO

--修改名录库中企业代码字段的长度
if exists (select * from syscolumns where id=object_id('业务_污染源名录库_总站') and name='企业代码')
begin
	alter table 业务_污染源名录库_总站 alter column 企业代码 varchar(50) not null
end
go
--修改名录库中法人代码字段的长度
if exists (select * from syscolumns where id=object_id('业务_污染源名录库_总站') and name='法人代码')
begin
	alter table 业务_污染源名录库_总站 alter column 法人代码 varchar(50) not null
end
go

--=====================2012-03-06之后修改==================

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废水统计]'))
DROP VIEW [dbo].[V_废水统计]
GO

--录入情况废水统计
--企业类型: 1:污染源,2:污水处理厂,3:固废处理厂
create view [dbo].[V_废水统计]
as
select dbo.业务_废水监测数据.企业代码,dbo.业务_废水监测数据.企业类型,dbo.业务_废水监测数据.监测年, dbo.业务_废水监测数据.季度, dbo.业务_污染源名录库_总站.行政区代码, 
       dbo.业务_污染源名录库_总站.污染源控制级别代码,dbo.业务_污染源名录库_总站.污染源控制级别代码气
from dbo.业务_废水监测数据 inner join dbo.业务_企业基本信息
	on dbo.业务_废水监测数据.企业代码 = dbo.业务_企业基本信息.企业代码 
	and dbo.业务_废水监测数据.监测年 = dbo.业务_企业基本信息.监测年 
	and dbo.业务_废水监测数据.企业类型 = 1
	and dbo.业务_废水监测数据.污染物浓度 is not null
	INNER JOIN dbo.业务_污染源名录库_总站 
	ON dbo.业务_企业基本信息.监测年=dbo.业务_污染源名录库_总站.年度
	AND 业务_企业基本信息.行政区代码=业务_污染源名录库_总站.行政区代码 
	and 业务_企业基本信息.法人代码=业务_污染源名录库_总站.法人代码 
	and 业务_企业基本信息.详细名称=业务_污染源名录库_总站.企业名称
	and 业务_企业基本信息.污染源控制级别代码=业务_污染源名录库_总站.污染源控制级别代码
	AND dbo.业务_污染源名录库_总站.企业类型=1
go

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废气统计]'))
DROP VIEW [dbo].[V_废气统计]
GO

--录入情况废气统计
--企业类型: 1:污染源,2:污水处理厂,3:固废处理厂
create view [dbo].[V_废气统计]
as
select dbo.业务_废气监测数据.企业代码,dbo.业务_废气监测数据.企业类型, dbo.业务_废气监测数据.监测年, dbo.业务_废气监测数据.季度, dbo.业务_污染源名录库_总站.行政区代码, 
      dbo.业务_污染源名录库_总站.污染源控制级别代码,dbo.业务_污染源名录库_总站.污染源控制级别代码气
from dbo.业务_废气监测数据 inner join dbo.业务_企业基本信息 
	on dbo.业务_废气监测数据.企业代码 = dbo.业务_企业基本信息.企业代码 
	and dbo.业务_废气监测数据.监测年 = dbo.业务_企业基本信息.监测年 
	and dbo.业务_废气监测数据.企业类型 = 1
	and dbo.业务_废气监测数据.污染物浓度 is not null
	INNER JOIN dbo.业务_污染源名录库_总站 
	ON dbo.业务_企业基本信息.监测年=dbo.业务_污染源名录库_总站.年度
	AND 业务_企业基本信息.行政区代码=业务_污染源名录库_总站.行政区代码 
	and 业务_企业基本信息.法人代码=业务_污染源名录库_总站.法人代码 
	and 业务_企业基本信息.详细名称=业务_污染源名录库_总站.企业名称
	and 业务_企业基本信息.污染源控制级别代码气=业务_污染源名录库_总站.污染源控制级别代码气
	and dbo.业务_污染源名录库_总站.企业类型=1
go

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_污水处理厂统计]'))
DROP VIEW [dbo].[V_污水处理厂统计]
GO

--录入情况污水处理厂统计
--企业类型: 1:污染源,2:污水处理厂,3:固废处理厂
create view [dbo].[V_污水处理厂统计]
as
select 业务_污水处理厂监测数据.企业代码,业务_污水处理厂监测数据.监测年,业务_污水处理厂监测数据.季度,
	   dbo.业务_污染源名录库_总站.行政区代码,业务_污染源名录库_总站.污染源控制级别代码
from dbo.业务_污水处理厂监测数据 inner join 业务_污水处理厂信息
	 on dbo.业务_污水处理厂监测数据.企业代码 = dbo.业务_污水处理厂信息.企业代码 
     and dbo.业务_污水处理厂监测数据.监测年 = dbo.业务_污水处理厂信息.监测年
     and dbo.业务_污水处理厂监测数据.出口污染物浓度 is not null
	 inner join 业务_污染源名录库_总站
	 on dbo.业务_污水处理厂信息.监测年 = dbo.业务_污染源名录库_总站.年度
	 and dbo.业务_污水处理厂信息.行政区代码 = dbo.业务_污染源名录库_总站.行政区代码 
     and dbo.业务_污水处理厂信息.法人代码 = dbo.业务_污染源名录库_总站.法人代码
     and dbo.业务_污水处理厂信息.详细名称 = dbo.业务_污染源名录库_总站.企业名称
     and 业务_污水处理厂信息.控制级别代码=业务_污染源名录库_总站.污染源控制级别代码
	 and dbo.业务_污染源名录库_总站.企业类型=2
GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_固废处理厂统计]'))
DROP VIEW [dbo].[V_固废处理厂统计]
GO

--录入情况固废处理厂统计
--企业类型: 1:污染源,2:污水处理厂,3:固废处理厂
create view [dbo].[V_固废处理厂统计]
as

select a.企业代码,a.监测年,a.季度,b.行政区代码,c.污染源控制级别代码 from 
(
	select distinct 企业代码,监测年,季度 from 业务_废水监测数据 where 污染物浓度 is not null and 企业类型=3
	union
	select distinct 企业代码,监测年,季度 from 业务_废气监测数据 where 污染物浓度 is not null and 企业类型=3
) as a
inner join dbo.业务_固废处理厂信息 as b 
on a.企业代码 = b.企业代码 and a.监测年 = b.监测年 
inner join 业务_污染源名录库_总站 as c
on b.监测年=c.年度 and b.行政区代码=c.行政区代码 and b.法人代码=c.法人代码 and b.详细名称=c.企业名称
and b.控制级别代码=c.污染源控制级别代码 and c.企业类型=3
GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废水排放量计算_名录库]'))
DROP VIEW [dbo].[V_废水排放量计算_名录库]
GO

--V_废水排放量计算_名录库
CREATE VIEW [dbo].[V_废水排放量计算_名录库]
AS
SELECT dbo.业务_废水监测数据.企业代码, dbo.业务_废水监测数据.监测点代码, dbo.业务_废水监测数据.监测年, dbo.业务_废水监测数据.监测项目编号, 
      dbo.业务_企业季生产情况_废水.平均工况负荷, dbo.业务_企业季生产情况_废水.季, dbo.业务_废水监测数据.季度, 
      dbo.业务_废水监测数据.污染物浓度, dbo.业务_废水监测数据.废水排放量, dbo.业务_废水监测数据.工况负荷, dbo.业务_企业基本信息.行业代码, 
      dbo.业务_废水排口信息.受纳水体代码, dbo.业务_企业基本信息.详细名称, dbo.业务_企业基本信息.行政区代码, 
      dbo.业务_企业基本信息.污染源控制级别代码, dbo.业务_企业季生产情况_废水.生产总天数, dbo.业务_废水监测数据.监测点名称, 
      dbo.业务_废水监测数据.次数, dbo.业务_企业基本信息.污染源控制级别代码气
FROM dbo.业务_废水监测数据 INNER JOIN dbo.业务_废水排口信息
	 ON dbo.业务_废水监测数据.监测年 = dbo.业务_废水排口信息.监测年
	 AND dbo.业务_废水监测数据.企业代码 = dbo.业务_废水排口信息.企业代码
	 AND dbo.业务_废水监测数据.监测点代码 = dbo.业务_废水排口信息.监测点代码
	 AND dbo.业务_废水监测数据.企业类型 = dbo.业务_废水排口信息.企业类型
	 INNER JOIN dbo.业务_污染源名录库_总站
	 ON dbo.业务_污染源名录库_总站.年度=dbo.业务_废水排口信息.监测年
	 AND dbo.业务_污染源名录库_总站.企业代码=dbo.业务_废水排口信息.企业代码
	 AND dbo.业务_污染源名录库_总站.企业类型 = dbo.业务_废水排口信息.企业类型
	 INNER JOIN dbo.业务_企业基本信息 
	 ON dbo.业务_企业基本信息.监测年=dbo.业务_污染源名录库_总站.年度
	 AND 业务_企业基本信息.行政区代码=业务_污染源名录库_总站.行政区代码 
	 and 业务_企业基本信息.法人代码=业务_污染源名录库_总站.法人代码 
	 and 业务_企业基本信息.详细名称=业务_污染源名录库_总站.企业名称
	 AND dbo.业务_企业基本信息.污染源控制级别代码=dbo.业务_污染源名录库_总站.污染源控制级别代码
	 AND dbo.业务_污染源名录库_总站.企业类型=1 
	 INNER JOIN dbo.业务_企业季生产情况_废水
	 ON dbo.业务_废水监测数据.企业代码 = dbo.业务_企业季生产情况_废水.企业代码
	 AND dbo.业务_废水监测数据.监测年 = dbo.业务_企业季生产情况_废水.监测年
	 AND dbo.业务_废水监测数据.季度 = dbo.业务_企业季生产情况_废水.季
	 AND dbo.业务_废水监测数据.监测点代码 = dbo.业务_企业季生产情况_废水.废水排口
WHERE     (dbo.业务_废水监测数据.工况负荷 >0) AND (dbo.业务_企业季生产情况_废水.平均工况负荷 IS NOT NULL) AND 
      (dbo.业务_废水监测数据.污染物浓度 IS NOT NULL) AND (dbo.业务_废水监测数据.废水排放量 IS NOT NULL) AND 
      (dbo.业务_企业季生产情况_废水.生产总天数 IS NOT NULL)


GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废气排放量计算_名录库]'))
DROP VIEW [dbo].[V_废气排放量计算_名录库]
GO

--V_废气排放量计算_名录库
CREATE VIEW [dbo].[V_废气排放量计算_名录库]
AS
SELECT dbo.业务_废气监测数据.企业代码, dbo.业务_废气监测数据.监测点代码, dbo.业务_废气监测数据.监测年, dbo.业务_废气监测点信息.监测点名称, 
      dbo.业务_废气监测点信息.排污设备代码, dbo.业务_废气监测数据.污染物排放量, dbo.业务_企业季生产情况.平均工况负荷, 
      dbo.业务_废气监测数据.季度, dbo.业务_废气监测数据.次数, dbo.业务_废气监测数据.工况负荷, dbo.业务_企业基本信息.行业代码, 
      dbo.业务_企业基本信息.行政区代码, dbo.业务_企业基本信息.污染源控制级别代码, dbo.业务_企业基本信息.详细名称, 
      dbo.业务_企业季生产情况.生产总小时数, dbo.业务_废气监测数据.废气排放量, dbo.业务_废气监测数据.监测项目编号, 
      dbo.业务_企业废气排放设备.排污设备名称, dbo.业务_企业基本信息.污染源控制级别代码气, 
      dbo.业务_废气监测数据.污染物实测浓度 as 污染物浓度
FROM dbo.业务_企业基本信息 INNER JOIN dbo.业务_污染源名录库_总站 
	 ON dbo.业务_企业基本信息.监测年=dbo.业务_污染源名录库_总站.年度
	 AND 业务_企业基本信息.行政区代码=业务_污染源名录库_总站.行政区代码 
	 and 业务_企业基本信息.法人代码=业务_污染源名录库_总站.法人代码 
	 and 业务_企业基本信息.详细名称=业务_污染源名录库_总站.企业名称
	 AND dbo.业务_污染源名录库_总站.企业类型=1
	 INNER JOIN dbo.业务_废气监测点信息
	 ON dbo.业务_污染源名录库_总站.企业代码 = dbo.业务_废气监测点信息.企业代码
     AND dbo.业务_污染源名录库_总站.年度 = dbo.业务_废气监测点信息.监测年
     AND dbo.业务_污染源名录库_总站.企业类型 = dbo.业务_废气监测点信息.企业类型
     AND dbo.业务_企业基本信息.污染源控制级别代码气=dbo.业务_污染源名录库_总站.污染源控制级别代码气
     INNER JOIN dbo.业务_废气监测数据
     ON dbo.业务_废气监测数据.企业代码 = dbo.业务_废气监测点信息.企业代码 
     AND dbo.业务_废气监测数据.监测点代码 = dbo.业务_废气监测点信息.监测点代码 
     AND dbo.业务_废气监测数据.监测年 = dbo.业务_废气监测点信息.监测年 
     AND dbo.业务_废气监测数据.企业类型 = dbo.业务_废气监测点信息.企业类型
     INNER JOIN dbo.业务_企业季生产情况
     ON dbo.业务_企业季生产情况.企业代码 = dbo.业务_废气监测数据.企业代码
     AND dbo.业务_企业季生产情况.年 = dbo.业务_废气监测数据.监测年
     AND dbo.业务_企业季生产情况.季 = dbo.业务_废气监测数据.季度
     AND dbo.业务_企业季生产情况.废气设备 = dbo.业务_废气监测点信息.排污设备代码
     INNER JOIN dbo.业务_企业废气排放设备
     ON dbo.业务_废气监测点信息.监测年 = dbo.业务_企业废气排放设备.监测年 AND 
     dbo.业务_废气监测点信息.企业代码 = dbo.业务_企业废气排放设备.企业代码 AND 
     dbo.业务_废气监测点信息.企业类型 = dbo.业务_企业废气排放设备.企业类型 AND 
     dbo.业务_废气监测点信息.排污设备代码 = dbo.业务_企业废气排放设备.排污设备代码
WHERE 
	  dbo.业务_废气监测数据.工况负荷 > 0 AND dbo.业务_企业季生产情况.平均工况负荷 IS NOT NULL AND 
	  dbo.业务_废气监测数据.污染物实测浓度 IS NOT NULL AND dbo.业务_废气监测数据.废气排放量 IS NOT NULL AND 
	  dbo.业务_企业季生产情况.生产总小时数 IS NOT NULL

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_污水处理厂排放量计算_名录库]'))
DROP VIEW [dbo].[V_污水处理厂排放量计算_名录库]
GO

--V_污水处理厂排放量计算_名录库
Create View [dbo].[V_污水处理厂排放量计算_名录库]
as
select a.监测年,a.行政区代码,a.详细名称,a.企业代码,a.受纳水体代码,b.监测项目编号,c.季度,c.次数,c.出口污染物浓度*c.出口水量/1000 as 污染物排放量
	from 业务_污水处理厂信息 as a
	inner join 业务_污染源名录库_总站 as z
	on a.监测年=z.年度 and a.行政区代码=z.行政区代码 and a.法人代码=z.法人代码 and a.详细名称=z.企业名称 and z.企业类型=2
	inner join 业务_污水处理厂污染物信息 as b
	on a.监测年=b.监测年 and a.企业代码=b.企业代码
	inner join 业务_污水处理厂监测数据 as c
	on c.出口污染物浓度 is not null and c.出口水量 is not null 
	and b.监测年=c.监测年 and b.企业代码=c.企业代码 and b.监测项目编号=c.监测项目编号


GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_污染源名录库]'))
DROP VIEW [dbo].[V_污染源名录库]
GO

--污染源名录库
Create view [dbo].[V_污染源名录库]
as
select a.年度 as 监测年,case when b.企业代码 is null then a.企业代码 else b.企业代码 end as 企业代码,a.企业名称 as 详细名称,a.行政区代码,b.行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
from dbo.业务_污染源名录库_总站 as a
left join 业务_企业基本信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.污染源控制级别代码
where a.企业类型=1 and a.污染源控制级别代码=1
union
select a.年度 as 监测年,case when b.企业代码 is null then a.企业代码 else b.企业代码 end as 企业代码,a.企业名称 as 详细名称,a.行政区代码,b.行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,2 as 国控类型,b.企业代码 as 基本信息企业代码
from dbo.业务_污染源名录库_总站 as a
left join 业务_企业基本信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码气=b.污染源控制级别代码气
where a.企业类型=1 and a.污染源控制级别代码气=1

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_污水处理厂名录库]'))
DROP VIEW [dbo].[V_污水处理厂名录库]
GO

--污水处理厂名录库
Create view [dbo].[V_污水处理厂名录库]
as
	select a.年度 as 监测年,case when b.企业代码 is null then a.企业代码 else b.企业代码 end as 企业代码,a.企业名称 as 详细名称,a.行政区代码,'' as 行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
	from dbo.业务_污染源名录库_总站 as a
	left join 业务_污水处理厂信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.控制级别代码
	where a.企业类型=2 and a.污染源控制级别代码=1

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_固废处理厂名录库]'))
DROP VIEW [dbo].[V_固废处理厂名录库]
GO

--固废处理厂名录库
Create view [dbo].[V_固废处理厂名录库]
as
select a.年度 as 监测年,case when b.企业代码 is null then a.企业代码 else b.企业代码 end as 企业代码,a.企业名称 as 详细名称,a.行政区代码,'' as 行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
from dbo.业务_污染源名录库_总站 as a
left join 业务_固废处理厂信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.控制级别代码
where a.企业类型=3 and a.污染源控制级别代码=1

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废气统计检查]'))
DROP VIEW [dbo].[V_废气统计检查]
GO

CREATE VIEW [dbo].[V_废气统计检查]
AS
select distinct a.企业代码,b.详细名称,a.监测年 年度,a.季度,污染源控制级别代码,污染源控制级别代码气,行政区代码,法人代码 
from dbo.业务_废气监测数据 a 
	inner join
dbo.业务_企业基本信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where a.污染物浓度 IS NOT NULL

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废水统计检查]'))
DROP VIEW [dbo].[V_废水统计检查]
GO

CREATE VIEW [dbo].[V_废水统计检查]
AS
select distinct a.企业代码,详细名称,a.监测年 年度,a.季度,污染源控制级别代码,污染源控制级别代码气,行政区代码,法人代码
from dbo.业务_废水监测数据 a 
	inner join
dbo.业务_企业基本信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where a.污染物浓度 IS NOT NULL

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废水统计检查污水厂]'))
DROP VIEW [dbo].[V_废水统计检查污水厂]
GO

CREATE VIEW [dbo].[V_废水统计检查污水厂]
AS
select distinct a.企业代码,a.监测年 年度,a.季度,行政区代码,b.详细名称,b.法人代码,控制级别代码
from dbo.业务_污水处理厂监测数据 a 
	inner join
dbo.业务_污水处理厂信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where a.出口污染物浓度 IS NOT NULL


GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废水统计检查固废]'))
DROP VIEW [dbo].[V_废水统计检查固废]
GO

CREATE VIEW [dbo].[V_废水统计检查固废]
AS
select distinct a.企业代码,a.监测年 年度,a.季度,控制级别代码,行政区代码,法人代码,详细名称
from dbo.业务_废水监测数据 a 
	inner join
dbo.业务_固废处理厂信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where a.污染物浓度 IS NOT NULL

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_废气统计检查固废]'))
DROP VIEW [dbo].[V_废气统计检查固废]
GO

CREATE VIEW [dbo].[V_废气统计检查固废]
AS
select distinct a.企业代码,a.监测年 年度,a.季度,控制级别代码,行政区代码,法人代码,详细名称
from dbo.业务_废气监测数据 a 
	inner join
dbo.业务_固废处理厂信息 b on a.企业代码=b.企业代码 and a.监测年=b.监测年
where a.污染物浓度 IS NOT NULL

GO


--查询统计添加“数据审核”模块
if not exists(select * from [系统_功能] where 功能编码=504 and 功能大类名称='查询统计' and 功能名称='数据审核')
insert into 系统_功能 values (87,'504','数据审核',5,'查询统计',null)
go
if not exists(select * from [系统_角色功能关系] where 角色ID=1 and 功能模块ID=87)
insert into 系统_角色功能关系 values(1,87)
go

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetStarndardRange]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetStarndardRange]
GO

CREATE FUNCTION [dbo].[GetStarndardRange] 
(
	@排放下限 numeric(18,6),
	@排放上限 numeric(18,6)
)
RETURNS varchar(50)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @rlst varchar(50)  
	select @rlst=''
	                                    	
	if(@排放下限>0)
	begin
		select @rlst=CAST(dbo.GetFormatedNumber(@排放下限) as varchar)+'-'
		+CAST(dbo.GetFormatedNumber(@排放上限) as varchar)
	end
	else 
	begin
		select @rlst=CAST(dbo.GetFormatedNumber(@排放上限) as varchar)
	end
	-- Return the result of the function
	RETURN @rlst
END

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

GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetFormatedUnit]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetFormatedUnit]
GO

Create FUNCTION [dbo].[GetFormatedUnit] 
                                    (
	                                    @pollutantcode varchar(20),
	                                    @unit varchar(10)
                                    )
                                    RETURNS varchar(30)
                                    AS
                                    BEGIN
                                    -- Declare the return variable here
                                    declare @rlst varchar(30)
                                    select @rlst=@unit
									if(@unit='0')
									begin
										set @unit=''
									end
                                    if(@pollutantcode='W_1')
                                    begin
	                                    if(@unit is null or @unit='' or @unit='无')
		                                    select @rlst='无量纲'		
                                    end
                                    --else if(@pollutantcode='W_11')
                                    --begin
	                                   -- if(@unit is null or @unit='' or @unit='无')
		                                  --  select @rlst='mg/L'
                                    --end
                                    else if(@pollutantcode='W_2')
                                    begin
	                                    if(@unit is null or @unit='' or @unit='无')
		                                    select @rlst='倍'
                                    end
									else
									begin	
									 if(@unit is null or @unit='' or @unit='无')
		                                   select @rlst='mg/L'
									end
                                    -- Return the result of the function
                                    RETURN @rlst
                                    END
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[UpdateValuationData]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[UpdateValuationData]
GO
--=================================================
-- Aurhor: hanfei
-- Date:   2012-03-10
-- Description: 达标评价中达标纠正模块，
-- 将监测数据中的标准值更新为对应时间段内的最新值
--=================================================
Create proc [dbo].[UpdateValuationData]
as
	--监测年,只计算2012年以及2012年以后的数据，这里设置监测年
	declare @year int
	select @year=max(监测年) from 业务_企业基本信息 where 监测年<=year(getdate())
	if(@year is null or @year<2012)
	begin
		select @year=max(监测年) from 业务_污水处理厂信息 where 监测年<=year(getdate())
	end
	if(@year is null or @year<2012)
	begin
		set @year = 0
		return
	end;
	
	--废气监测项目排放标准
	with CTE_FQ as
	(
		select 标准代码,监测项目编号,条件编码,排放单位,排放上限,排放下限,排放上限运算符,排放下限运算符
		from 系统_污染物标准排放明细 where 监测类型 in ('3','6')
	)
	--更新废气数据中的排放标准值
	update 业务_废气监测数据
	set 
	执行标准代码=b.执行标准代码,
	执行标准条件代码=b.执行标准条件代码,
	排放单位=c.排放单位,
	排放上限=c.排放上限,
	排放下限=c.排放下限,
	排放上限运算符=c.排放上限运算符,
	排放下限运算符=c.排放下限运算符,
	浓度是否达标=dbo.GetIsOverStarndard(a.污染物浓度,c.排放下限,c.排放上限,a.监测项目编号),
	超标倍数=dbo.GetOverStarndardNum(a.污染物浓度,c.排放下限,c.排放上限,a.监测项目编号)
	from 
	业务_废气监测数据 as a inner join 业务_企业监测项目时间段 as b 
	on a.监测年=b.监测年 and a.企业代码=b.企业代码 and a.企业类型=b.企业类型 and a.监测点代码=b.监测点代码 and a.监测点名称=b.监测点名称 and a.监测项目编号=b.监测项目编号
	and cast(cast(a.监测年 as varchar(4))+'-'+cast(a.监测月 as varchar(2))+'-'+cast(a.监测日 as varchar(2)) as datetime) between b.起始日期 and b.结止日期
	left join CTE_FQ as c
	on b.执行标准代码=c.标准代码 and b.执行标准条件代码=c.条件编码 and b.监测项目编号=c.监测项目编号
	where a.监测年=@year and b.企业类型<>2 and (a.排放上限<>c.排放上限 or a.排放下限<>c.排放下限 
	or (a.排放上限 is not null and c.排放上限 is null) or (a.排放上限 is null and c.排放上限 is not null)
	or (a.排放下限 is not null and c.排放下限 is null) or (a.排放下限 is null and c.排放下限 is not null)
	or a.执行标准代码<>b.执行标准代码 or a.执行标准条件代码<>b.执行标准条件代码);
	
	--废气无组织排放标准
	with CTE_WZZ as
	(
		select 标准代码,监测项目编号,条件编码,排放单位,排放上限,排放下限,排放上限运算符,排放下限运算符
		from 系统_污染物标准排放明细 where 监测类型='4'
	)
	--更新废气无组织数据中的排放标准值
	update 业务_废气无组织排放监测数据
	set
	执行标准代码=b.执行标准代码,
	执行标准条件代码=b.执行标准条件代码,
	排放单位=c.排放单位,
	排放上限=c.排放上限,
	排放下限=c.排放下限,
	排放上限运算符=c.排放上限运算符,
	排放下限运算符=c.排放下限运算符,
	污染物浓度是否达标=dbo.GetIsOverStarndard(a.污染物浓度,c.排放下限,c.排放上限,a.监测项目编号)
	from 
	业务_废气无组织排放监测数据 as a inner join 业务_企业监测项目时间段 as b 
	on a.监测年=b.监测年 and a.企业代码=b.企业代码 and a.企业类型=b.企业类型 and a.监测点代码=b.监测点代码 and a.监测点名称=b.监测点名称 and a.监测项目编号=b.监测项目编号
	and cast(cast(a.监测年 as varchar(4))+'-'+cast(a.监测月 as varchar(2))+'-'+cast(a.监测日 as varchar(2)) as datetime) between b.起始日期 and b.结止日期
	left join CTE_WZZ as c
	on b.执行标准代码=c.标准代码 and b.执行标准条件代码=c.条件编码 and b.监测项目编号=c.监测项目编号
	where a.监测年=@year and a.企业类型<>2 
	and (a.排放上限<>c.排放上限 or a.排放下限<>c.排放下限 
	or (a.排放上限 is not null and c.排放上限 is null) or (a.排放上限 is null and c.排放上限 is not null)
	or (a.排放下限 is not null and c.排放下限 is null) or (a.排放下限 is null and c.排放下限 is not null)
	or a.执行标准代码<>b.执行标准代码 or a.执行标准条件代码<>b.执行标准条件代码);
	 
	--废水监测项目排放标准
	with CTE_FS as
	(
		select 标准代码,条件编码,排放上限,排放下限,排放上限运算符,排放下限运算符,排放单位,监测项目编号 
		from 系统_污染物标准排放明细 where 监测类型='2' and 监测项目编号<>'W_1'
		union all
		select 标准代码,条件编码,排放上限,排放下限,排放上限运算符,排放下限运算符,排放单位,监测项目编号 
		from 系统_污染物标准排放明细 where 监测类型='7' and 监测项目编号='W_1'
	)
	--更新废水数据中的排放标准值
	update 业务_废水监测数据
	set 
	执行标准代码=b.执行标准代码,
	执行标准条件代码=b.执行标准条件代码,
	排放单位=c.排放单位,
	排放上限=c.排放上限,
	排放下限=c.排放下限,
	排放上限运算符=c.排放上限运算符,
	排放下限运算符=c.排放下限运算符,
	污染物浓度是否达标=dbo.GetIsOverStarndard(a.污染物浓度,c.排放下限,c.排放上限,a.监测项目编号),
	超标倍数=dbo.GetOverStarndardNum(a.污染物浓度,c.排放下限,c.排放上限,a.监测项目编号)
	from 
	业务_废水监测数据 as a inner join 业务_企业监测项目时间段 as b 
	on a.监测年=b.监测年 and a.企业代码=b.企业代码 and a.企业类型=b.企业类型 and a.监测点代码=b.监测点代码 and a.监测点名称=b.监测点名称 and a.监测项目编号=b.监测项目编号
	and cast(cast(a.监测年 as varchar(4))+'-'+cast(a.监测月 as varchar(2))+'-'+cast(a.监测日 as varchar(2)) as datetime) between b.起始日期 and b.结止日期
	left join CTE_FS as c
	on b.执行标准代码=c.标准代码 and b.执行标准条件代码=c.条件编码 and b.监测项目编号=c.监测项目编号
	where a.监测年=@year and b.企业类型<>2 and (a.排放上限<>c.排放上限 or a.排放下限<>c.排放下限 
	or (a.排放上限 is not null and c.排放上限 is null) or (a.排放上限 is null and c.排放上限 is not null)
	or (a.排放下限 is not null and c.排放下限 is null) or (a.排放下限 is null and c.排放下限 is not null)
	or a.执行标准代码<>b.执行标准代码 or a.执行标准条件代码<>b.执行标准条件代码);

	--污水处理厂监测项目排放标准
	with CTE_WS as
	(
		select 标准代码,条件编码,排放上限,排放下限,排放上限运算符,排放下限运算符,排放单位,监测项目编号 
		from 系统_污染物标准排放明细 where 监测类型='2' and 监测项目编号<>'W_1'
		union all
		select 标准代码,条件编码,排放上限,排放下限,排放上限运算符,排放下限运算符,排放单位,监测项目编号 
		from 系统_污染物标准排放明细 where 监测类型='7' and 监测项目编号='W_1'
	)
	--更新污水处理厂数据中的排放标准值,只更新排放上限或者排放下限与监测时间段内的标准不相等的数据
	update 业务_污水处理厂监测数据
	set 
	执行标准代码=b.执行标准代码,
	执行标准条件代码=b.执行标准条件代码,
	排放单位=c.排放单位,
	排放上限=c.排放上限,
	排放下限=c.排放下限,
	排放上限运算符=c.排放上限运算符,
	排放下限运算符=c.排放下限运算符,
	浓度是否达标=dbo.GetIsOverStarndard(a.出口污染物浓度,c.排放下限,c.排放上限,a.监测项目编号),
	超标倍数=dbo.GetOverStarndardNum(a.出口污染物浓度,c.排放下限,c.排放上限,a.监测项目编号)
	from 
	业务_污水处理厂监测数据 as a inner join 业务_企业监测项目时间段 as b 
	on a.监测年=b.监测年 and a.企业代码=b.企业代码 and b.企业类型=2 and a.监测项目编号=b.监测项目编号
	and cast(cast(a.监测年 as varchar(4))+'-'+cast(a.监测月 as varchar(2))+'-'+cast(a.监测日 as varchar(2)) as datetime) between b.起始日期 and b.结止日期
	left join CTE_WS as c
	on b.执行标准代码=c.标准代码 and b.执行标准条件代码=c.条件编码 and b.监测项目编号=c.监测项目编号
	where a.监测年=@year and (a.排放上限<>c.排放上限 or a.排放下限<>c.排放下限 
	or (a.排放上限 is not null and c.排放上限 is null) or (a.排放上限 is null and c.排放上限 is not null)
	or (a.排放下限 is not null and c.排放下限 is null) or (a.排放下限 is null and c.排放下限 is not null)
	or a.执行标准代码<>b.执行标准代码 or a.执行标准条件代码<>b.执行标准条件代码);
GO

--废气在线比对 修改主键 
if exists ( SELECT *
                from sysobjects
                where   name = 'PK_业务_废气在线比对'
		  )
begin
	alter table 业务_废气在线比对 alter column 监测系统ID nvarchar(200) not null
	alter table 业务_废气在线比对 drop constraint PK_业务_废气在线比对
	alter table 业务_废气在线比对 add constraint PK_业务_废气在线比对
	primary key (监测年,监测月,监测日,监测时,监测分,企业代码,次数,监测点代码,监测项目编号,监测系统ID)
end
go

--废气在线比对_次达标情况增加主键 
if exists ( SELECT *
                from sysobjects
                where   name = 'PK_业务_废气在线比对_次达标情况'
		  )
begin
	alter table 业务_废气在线比对_次达标情况 alter column 监测系统ID nvarchar(200) not null
	alter table 业务_废气在线比对_次达标情况 drop constraint PK_业务_废气在线比对_次达标情况
	alter table 业务_废气在线比对_次达标情况 add constraint PK_业务_废气在线比对_次达标情况
	primary key (监测年,次数,监测日期,企业类型,企业代码,监测点代码,监测项目编号,监测系统ID)
end
go

--业务_废水在线比对 修改主键
if exists ( SELECT *
                from sysobjects
                where   name = 'PK_业务_废水在线比对'
		  )
begin
	alter table 业务_废水在线比对 alter column 监测系统ID nvarchar(200) not null
	alter table 业务_废水在线比对 drop constraint PK_业务_废水在线比对
	alter table 业务_废水在线比对 add constraint PK_业务_废水在线比对
	primary key (监测年,监测月,监测日,监测时,监测分,企业代码,次数,监测点代码,监测项目编号,监测系统ID)
end
go


IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_名录库_污染源]'))
DROP VIEW [dbo].[V_名录库_污染源]
GO

--污染源名录库
CREATE view [dbo].[V_名录库_污染源]
as
	select a.年度 as 监测年,b.企业代码,a.企业名称 as 详细名称,a.行政区代码,b.行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
	from dbo.业务_污染源名录库_总站 as a
	left join 业务_企业基本信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.污染源控制级别代码
	where a.企业类型=1
	union
	select a.年度 as 监测年,b.企业代码,a.企业名称 as 详细名称,a.行政区代码,b.行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,2 as 国控类型,b.企业代码 as 基本信息企业代码
	from dbo.业务_污染源名录库_总站 as a
	left join 业务_企业基本信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码气=b.污染源控制级别代码气
	where a.企业类型=1


GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_名录库_污水处理厂]'))
DROP VIEW [dbo].[V_名录库_污水处理厂]
GO

--污水处理厂名录库
CREATE view [dbo].[V_名录库_污水处理厂]
as
	select a.年度 as 监测年,b.企业代码,a.企业名称 as 详细名称,a.行政区代码,'' as 行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
	from dbo.业务_污染源名录库_总站 as a
	left join 业务_污水处理厂信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.控制级别代码
	where a.企业类型=2

GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[V_名录库_固废处理厂]'))
DROP VIEW [dbo].[V_名录库_固废处理厂]
GO

--固废处理厂名录库
Create view [dbo].[V_名录库_固废处理厂]
as
	select a.年度 as 监测年,b.企业代码,a.企业名称 as 详细名称,a.行政区代码,'' as 行业代码,a.法人代码,a.污染源控制级别代码,a.污染源控制级别代码气,a.企业类型,1 as 国控类型,b.企业代码 as 基本信息企业代码
	from dbo.业务_污染源名录库_总站 as a
	left join 业务_固废处理厂信息 as b on a.行政区代码=b.行政区代码 and a.法人代码=b.法人代码 and a.企业名称=b.详细名称 and a.年度=b.监测年 and a.污染源控制级别代码=b.控制级别代码
	where a.企业类型=3

GO

--=====================2012-03-13之后修改==================
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetCheckReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
	drop procedure [dbo].[GetCheckReport]
go

--exec [GetCheckReport] 2011,1,7,''
CREATE proc [dbo].[GetCheckReport]  
(
@TableType int,
@StrWhere varchar(max),
@IsOver varchar(50)
)
as
begin
	declare @select varchar(max)
	if(@IsOver<>'')
	begin
		if(@TableType=1 or @TableType=2 or @TableType=3 or @TableType=4)
		begin
			set @IsOver=' and 浓度是否达标='''+@IsOver+''''
		end
		if(@TableType=6)
		begin
			set @IsOver=' and 系统是否达标='''+@IsOver+''''
		end
		if(@TableType=5 or @TableType=7)
		begin
			set @IsOver=' where 监测系统是否合格='''+@IsOver+''''
		end
	end
if @TableType=1
begin
		--审核表(废水)
	set @select ='select c.行政区,b.详细名称,d.行业,f.受纳水体,a.监测点名称,g.标准名称 as 执行标准名称,
		a.执行标准代码,a.执行标准条件代码,a.监测年,b.行政区代码,b.企业代码,b.行业代码,e.受纳水体代码,
		a.工况负荷 as 生产负荷,a.废水排放量 as 监测点流量,h.监测项目名称,污染物浓度,
		a.排放上限,a.排放下限,a.排放单位,case when e.是否参与评价=0 then '''' else cast(a.浓度是否达标 as varchar) end as 浓度是否达标,a.监测项目编号,监测日期,e.是否参与评价
		into #temp from 
		(
			select 企业代码,企业类型,监测点名称,监测点代码,废水排放量,工况负荷,监测项目编号,污染物浓度,执行标准代码,执行标准条件代码,排放下限,排放上限,排放单位,污染物浓度是否达标 as 浓度是否达标,监测年,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期
			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.监测点名称 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.污染物浓度 is not null
		and b.污染源控制级别代码=1 and h.监测项目类别编号=1 '+ @StrWhere + ';
		select 行政区,详细名称,行业,受纳水体,监测点名称,执行标准名称,
		dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		监测日期,生产负荷,监测点流量,监测项目名称,
		REPLACE(CAST(dbo.GetFormatedNumber(污染物浓度) as varchar),''-'',''<'') as 污染物浓度,
		dbo.GetStarndardRange(排放下限,排放上限) as 标准限值,dbo.GetFormatedUnit(监测项目编号,排放单位) as 排放单位,
		case when 是否参与评价=0 then '''' else case 浓度是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end end as 浓度是否达标,
		case when 是否参与评价=0 then '''' else dbo.GetOverStarndardNum(污染物浓度,排放下限,排放上限,监测项目编号) end as 超标倍数,
		case when 是否参与评价=0 then ''废水不外排'' else '''' end as 备注 from #temp 
		where 1=1 ' + @IsOver +'
		order by 行政区代码,详细名称,受纳水体,监测点名称,执行标准名称,执行标准条件名称,监测日期'
		print (@select)
end
if @TableType=2
begin
		--审核表(废气)
	set @select='select c.行政区,b.详细名称,d.行业,a.监测点名称,g.标准名称 as 执行标准名称,b.行政区代码,b.企业代码,b.行业代码,
		a.执行标准代码,a.执行标准条件代码,a.监测年,a.污染物浓度,a.监测项目编号,
		a.工况负荷,a.废气排放量 as 流量,a.测点温度 as 烟气温度,a.含氧量,h.监测项目名称,
		a.污染物实测浓度 as 实测浓度,a.污染物浓度 as 折算浓度,a.排放上限,a.排放下限,a.浓度是否达标,监测日期
		into #temp from  
		(
			select 企业代码,企业类型,监测点名称,监测点代码,废气排放量,含氧量,测点温度,污染物实测浓度,工况负荷,监测项目编号,污染物浓度,执行标准代码,执行标准条件代码,排放下限,排放上限,排放单位,浓度是否达标,监测年,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)+'' ''+convert(varchar,监测时)+'':00:00'') as 监测日期
			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.监测点名称 and a.企业类型=e.企业类型 
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.污染物浓度 is not null
		and b.污染源控制级别代码气=1 and h.监测项目类别编号=2 '+ @StrWhere + @IsOver +';
		select 行政区,详细名称,行业,监测点名称,执行标准名称,
		dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		监测日期,工况负荷,流量,烟气温度,含氧量,监测项目名称,
		REPLACE(CAST(dbo.GetFormatedNumber(实测浓度) as varchar),''-'',''<'') as 实测浓度,
		REPLACE(CAST(dbo.GetFormatedNumber(折算浓度) as varchar),''-'',''<'') as 折算浓度,
		dbo.GetStarndardRange(排放下限,排放上限) as 标准限值,
		case 浓度是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 浓度是否达标,
		dbo.GetOverStarndardNum(污染物浓度,排放下限,排放上限,监测项目编号) as 超标倍数,'''' as 备注 from #temp
		order by 行政区代码,详细名称,监测点名称,执行标准名称,执行标准条件名称,监测日期'
end
if @TableType=3
begin
		--审核表(污水处理厂)
	set @select = 'select c.行政区,b.详细名称,f.受纳水体,a.监测年,b.行政区代码,b.企业代码,b.受纳水体代码,
		g.标准名称 as 执行标准名称,a.执行标准代码,a.执行标准条件代码,a.监测项目编号,
		b.设计处理能力 as 设计日处理量,a.进口水量,a.出口水量,h.监测项目名称,
		a.进口污染物浓度,a.出口污染物浓度,a.排放上限,a.排放下限,a.浓度是否达标,监测日期
		into #temp from 
		(
			select 监测年,企业代码,监测项目编号,执行标准代码,执行标准条件代码,进口水量,出口水量,进口污染物浓度,出口污染物浓度,排放上限,排放下限,浓度是否达标,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)) as 监测日期
			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 b.控制级别代码=1 and a.出口污染物浓度 is not null 
		and h.监测项目类别编号=1 '+ @StrWhere + @IsOver +';
		select 行政区,详细名称,受纳水体,监测日期,
		执行标准名称,dbo.GetAllStandardConditions(执行标准代码,执行标准条件代码) as 执行标准条件名称,
		设计日处理量,进口水量,出口水量,监测项目名称,
		REPLACE(CAST(dbo.GetFormatedNumber(进口污染物浓度) as varchar),''-'',''<'') as 进口污染物浓度,
		REPLACE(CAST(dbo.GetFormatedNumber(出口污染物浓度) as varchar),''-'',''<'') as 出口污染物浓度,
		dbo.GetStarndardRange(排放下限,排放上限) as 标准限值,
		case 浓度是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 浓度是否达标,
		dbo.GetOverStarndardNum(出口污染物浓度,排放下限,排放上限,监测项目编号) as 超标倍数,'''' as 备注 from #temp
		order by 行政区代码,详细名称,执行标准名称,执行标准条件名称,监测日期'
end
if @TableType=4
begin
		--审核表(火电废气(省))
	set @select = 'select c.行政区,b.详细名称,a.监测点名称,g.标准名称 as 执行标准名称,
		dbo.GetAllStandardConditions(a.执行标准代码,a.执行标准条件代码) as 执行标准条件名称,监测日期,
		a.工况负荷,a.废气排放量 as 流量,a.测点温度 as 烟气温度,a.含氧量,h.监测项目名称,
		REPLACE(CAST(dbo.GetFormatedNumber(污染物实测浓度) as varchar),''-'',''<'') as 实测浓度,
		REPLACE(CAST(dbo.GetFormatedNumber(污染物浓度) as varchar),''-'',''<'') as 折算浓度,
		dbo.GetStarndardRange(a.排放下限,a.排放上限) as 标准限值,
		case a.浓度是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 浓度是否达标,
		dbo.GetOverStarndardNum(a.污染物浓度,a.排放下限,a.排放上限,a.监测项目编号) as 超标倍数,'''' as [备注]
		from 
		(
			select 企业代码,企业类型,监测点名称,监测点代码,废气排放量,含氧量,测点温度,污染物实测浓度,工况负荷,监测项目编号,污染物浓度,执行标准代码,执行标准条件代码,排放下限,排放上限,排放单位,浓度是否达标,监测年,
			convert(datetime,convert(varchar,监测年)+''-''+convert(varchar,监测月)+''-''+convert(varchar,监测日)+'' ''+convert(varchar,监测时)+'':00:00'') 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.监测点名称 and a.企业类型=e.企业类型 
		left join 系统_标准库 g on a.执行标准代码=g.标准代码
		join 系统_监测项目 h on a.监测项目编号=h.监测项目编号
		where a.污染物浓度 is not null 
		and b.污染源控制级别代码气=1 and h.监测项目类别编号=2'+ @StrWhere + @IsOver +'
		and b.行业代码=''4411''
		order by c.行政区代码,a.企业代码,a.监测日期'
end
if @TableType=5
begin
		--审核表(在线废水)
	set @select=
		'select a.监测年,次数,b.行政区代码,c.行政区,b.详细名称,a.企业代码,a.监测系统ID,a.监测项目编号,d.监测项目名称,e.监测系统名称,监测时间 as 监测日期,监测日期 as 日期,
		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 监测日期,
			cast(监测年 as varchar)+''-''+cast(监测月 as varchar)+''-''+cast(监测日 as varchar)+'' ''+cast(监测时 as varchar)+'':''+case when 监测分<10 then ''0''+cast(监测分 as varchar) else cast(监测分 as varchar) end as 监测时间
			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 '+ @StrWhere+';
		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.行政区,a.详细名称,a.监测点名称,a.安装位置,a.集成厂家,a.监测系统型号,a.监测原理,a.监测设备型号,a.设备生产厂家,a.监测日期,
		a.监测项目名称,a.手工监测数据,a.自动监测数据,
		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 单位,a.比对结果,a.评价标准,
		case a.是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 监测项目是否合格,
		case b.监测系统是否合格 when 0 then ''否'' when 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=6
begin
		--审核表(在线废气)
	set @select = 
	'select 行政区,c.行政区代码,详细名称,a.企业代码,a.监测点代码,e.监测点名称,监测系统ID,a.监测年,次数,a.监测项目编号,d.监测项目名称,max(监测日期) as 监测日期,avg(手工监测数据) as 手工监测数据,avg(自动监测数据) as 自动监测数据,avg(比对结果) as 比对结果,
	case when sum(是否达标)-count(是否达标)=0 then 1 else 0 end as 是否达标,单位,评判标准
	into #t from 业务_废气在线比对_次达标情况 as a
	join V_工业和固废企业_简单 b
	on a.企业代码=b.企业代码 and a.监测年=b.监测年
	join (select 代码编码 as 行政区代码,代码名称 as 行政区 from 系统_代码 where 代码类型编码=14) c
	on b.行政区代码=c.行政区代码 
	inner join
	(
		select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
		where 水气类别=''Gas'' and 主体类别=''BD''
	) d on a.监测项目编号=d.监测项目编码
	inner join 业务_废气监测点信息 as e
	on a.企业代码=e.企业代码 and a.监测点代码=e.监测点代码 and a.监测年=e.监测年
	where 监测系统ID is not null and b.污染源控制级别代码气=1 '+@StrWhere+'
	group by 行政区,c.行政区代码,详细名称,a.企业代码,a.监测点代码,e.监测点名称,监测系统ID,a.监测年,次数,监测项目编号,d.监测项目名称,单位,评判标准;
	
	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 
	(
		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 行政区,详细名称,a.监测点名称,e.安装位置,e.集成厂家,e.监测系统型号,d.监测设备型号,d.设备生产厂家,d.监测原理,
	convert(nvarchar,监测日期,20) as 监测日期,a.监测项目名称,a.手工监测数据,a.自动监测数据,a.单位,a.比对结果,a.评判标准,
	case a.是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 是否达标,
	case a.系统是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 系统是否达标
	from #temp a 
	join 业务_在线监测系统 e on a.监测系统ID=e.id
	join 业务_在线监测系统_项目 d on d.监测系统ID号=e.id and a.监测项目编号=d.监测项目编号
	where 1=1 '+ @IsOver+'
	order by 行政区代码,详细名称,a.监测点名称,安装位置,集成厂家,监测系统型号'
end
if @TableType=7
begin
	--审核表(在线污水处理厂)
	set @select = 'select a.监测年,次数,b.行政区代码,c.行政区,b.详细名称,a.企业代码,a.监测系统ID,a.监测项目编号,d.监测项目名称,e.监测系统名称,监测时间 as 监测日期,监测日期 as 日期,
		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 监测日期,
			cast(监测年 as varchar)+''-''+cast(监测月 as varchar)+''-''+cast(监测日 as varchar)+'' ''+cast(监测时 as varchar)+'':''+case when 监测分<10 then ''0''+cast(监测分 as varchar) else cast(监测分 as varchar) end as 监测时间
			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 b.控制级别代码=1 and a.监测系统ID is not null and 数据类型编码 is not null
		and a.企业类型=2 ' + @StrWhere +';
		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.行政区,a.详细名称,a.监测点名称,a.安装位置,a.集成厂家,a.监测系统型号,a.监测原理,a.监测设备型号,a.设备生产厂家,a.监测日期,
		a.监测项目名称,a.手工监测数据,a.自动监测数据,
		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 单位,a.比对结果,a.评价标准,
		case a.是否达标 when 0 then ''否'' when 1 then ''是'' else '''' end as 监测项目是否合格,
		case b.监测系统是否合格 when 0 then ''否'' when 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

--删除废水数据中存在的废气监测数据(垃圾数据)
delete from 业务_废水监测数据 where left(监测点代码,2)='FQ'
go


--修改业务_企业监测点执行标准字段“监测点名称”长度限值
if exists (SELECT * from sysobjects where name = 'PK_业务_企业监测点执行标准')
begin
	alter table 业务_企业监测点执行标准 drop constraint PK_业务_企业监测点执行标准
	alter table 业务_企业监测点执行标准 alter column 监测点名称 varchar(200) not null
	alter table 业务_企业监测点执行标准 add constraint PK_业务_企业监测点执行标准
	primary key (监测年,企业代码,企业类型,监测点代码,监测点名称,起始日期,结止日期)
end
go

--修改业务_企业监测项目时间段字段“监测点名称”长度限值
if exists (SELECT * from sysobjects where name = 'PK_业务_企业监测项目时间段')
begin
	alter table 业务_企业监测项目时间段 drop constraint PK_业务_企业监测项目时间段
	alter table 业务_企业监测项目时间段 alter column 监测点名称 varchar(200) not null
	alter table 业务_企业监测项目时间段 add constraint PK_业务_企业监测项目时间段
	primary key (监测年,企业代码,企业类型,监测点代码,监测点名称,起始日期,结止日期,监测项目编号)
end
go

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

-- =============================================
-- exec GasOnlineCompare 1,1,'','','','','',''
-- example:		
-- Author:		<Alex_QY>
-- Create date: <Create Date,2011-10-26,>
-- Description:	<Description,废气在线比对评价,>
-- =============================================
CREATE PROCEDURE [dbo].[GasOnlineCompare]
(
	@pjtype int,
	@type int,
	@waterControlCode varchar(100),
	@gasControlCode varchar(100),
	@year varchar(4),
	@quarter varchar(50),
	@startDate varchar(20),
	@endDate varchar(20),
	@cityCode varchar(max),
	@projectCode varchar(max),
	@hangyecode varchar(max),
	@projectArea varchar(50)
)
as
begin
declare @sql varchar(max)
/*构造条件*/
declare @condition varchar(max)
if(@year='0')
begin
	set @condition=' and datediff(dd,a.监测日期,'+''''+@startDate+''''+')<=0'+
			   ' and datediff(dd,a.监测日期,'+''''+@endDate+''''+')>=0'
end
else
begin
set @condition=' and a.监测年='+@year+' and a.季度 in('+@quarter+')'
end
if	@waterControlCode<>'' 
begin
set @condition=@condition+' and b.污染源控制级别代码 in('+@waterControlCode+')'
end 
if	@gasControlCode<>'' 
begin
set @condition=@condition+' and b.污染源控制级别代码气 in('+@gasControlCode+')'
end 
if	@cityCode<>''   
begin
set @condition=@condition+' and b.行政区代码 in('+@cityCode+')'
end 
if	@projectCode<>'' 
begin
set @condition=@condition+' and a.监测项目编号='''+@projectCode+''' '
end 
if	@hangyecode<>'' 
begin
set @condition=@condition+' and b.行业代码 in('+@hangyecode+')'
end 	   
if (@type=3 and @projectArea<>'')
begin
	set @condition=@condition+' and 专题区域编码 in('+@projectArea+')'
end


if @type=1 --计算标准:地区(省)
begin
set @sql='select 监测年,省 as 行政区,省代码 as 行政区代码,count(distinct 企业代码) as 安装设备企业数,count(监测系统ID) as 监测系统数,cast(sum(监测系统是否合格) as decimal(18,2))/count(监测系统是否合格) as 监测系统合格率 from
		(
			select 监测年,省,省代码,企业代码,监测系统ID,case when count(是否达标)=sum(是否达标) then 1 else 0 end as 监测系统是否合格
			from
			(
				select a.监测年,a.季度,c.省,c.省代码,a.企业代码,a.监测系统ID,监测项目编号,次数,a.是否达标 
				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.省代码
				inner join
				(
					select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
					where 水气类别=''Gas'' and 主体类别=''BD''
				) d on a.监测项目编号=d.监测项目编码
				where a.监测系统ID is not null '+@condition+'
			) a group by 监测年,省,省代码,企业代码,监测系统ID
		) a group by  监测年,省,省代码
		order by 监测年,省代码'
end
if @type=2 --计算标准:地区(市)
begin
set @sql='select 监测年,省+''/''+市 as 行政区,市代码 as 行政区代码,count(distinct 企业代码) as 安装设备企业数,count(监测系统ID) as 监测系统数,cast(sum(监测系统是否合格) as decimal(18,2))/count(监测系统是否合格) as 监测系统合格率 from
		(
			select 监测年,省,省代码,市,市代码,企业代码,监测系统ID,case when count(是否达标)=sum(是否达标) then 1 else 0 end as 监测系统是否合格
			from
			(
				select a.监测年,a.季度,c.省,c.省代码,d.市,d.市代码,a.企业代码,a.监测系统ID,a.监测设备ID,监测项目编号,次数,a.是否达标 
				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.市代码
				inner join
				(
					select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
					where 水气类别=''Gas'' and 主体类别=''BD''
				) e on a.监测项目编号=e.监测项目编码			
				where a.监测系统ID is not null'+@condition+'
			) a group by 监测年,省,省代码,市,市代码,企业代码,监测系统ID
		) a group by 监测年,省,省代码,市,市代码		
		order by 监测年,省代码,市代码'
end
if @type=3 --计算标准:专题区域
begin
set @sql='select 监测年,专题区域名称 as 行政区,专题区域编码 as 行政区代码,count(distinct 企业代码) as 安装设备企业数,count(监测系统ID) as 监测系统数,cast(sum(监测系统是否合格) as decimal(18,2))/count(监测系统是否合格) as 监测系统合格率 from
		(
			select 监测年,专题区域名称,专题区域编码,企业代码,监测系统ID,case when count(是否达标)=sum(是否达标) then 1 else 0 end as 监测系统是否合格
			from
			(
				select a.监测年,a.季度,c.专题区域名称,c.专题区域编码,a.企业代码,a.监测系统ID,a.监测设备ID,监测项目编号,次数,a.是否达标 
				from 业务_废气在线比对_次达标情况 a join V_工业和固废企业_简单 b
				on a.监测年=b.监测年 and a.企业代码=b.企业代码 and a.企业类型=b.企业类型
				join 
				(
					select c.代码名称,c.代码编码 as 专题区域编码,c.代码名称 as 专题区域名称,d.行政区编码 from 系统_代码 c 
					join 系统_专题区域代码 d on c.ID=d.区域类型编码 where c.代码类型编码=33
				) c
				on b.行政区代码=c.行政区编码
				inner join
				(
					select 监测项目编码,监测项目名称 from 业务_抽测比对评价项目 
					where 水气类别=''Gas'' and 主体类别=''BD''
				) d on a.监测项目编号=d.监测项目编码			
				where a.监测系统ID is not null'+@condition+'
			) a group by 监测年,专题区域名称,专题区域编码,企业代码,监测系统ID
		) a group by 监测年,专题区域名称,专题区域编码
		order by 监测年,专题区域编码'
end
exec(@sql)
end

GO