[导入]花了一天写的存储过程

[导入]花了一天写的存储过程

--*********************************************************--

--新建日期 2008-07-23 新建者 CK

--修改时间

--修改者

--*********************************************************--

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

--参数

declare @QBusinessDate1 datetime--业务时间

set @QBusinessDate1='1900-01-01'

declare @QBusinessDate2 datetime--业务时间

set @QBusinessDate2='2008-07-22'

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

declare @IsFood int--食品类、非食品类

set @IsFood=1

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

declare @Category nvarchar(50)--类别名        --内部变量

declare @Num int--检验批次

declare @AvailableNum int--合格批次

declare @AvailableRate float--合格率

declare @ClientNum int--检验企业个数

declare @CANum int--不合格企业个数

declare @CARate float--不合格企业率

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

declare @i int        --循环计数器

declare @j int

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

--新建临时表

create table #tmp_table(Catagory nvarchar(50),Batch int,Batch_Pass int,PassRate float,Corporation int,

Corporation_False int,FalseRate float)

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

--获取合计信息

select @Num=count(*) from Spe_HYStatic_TotalBisInfo where IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取检验批次

select @AvailableNum=count(*) from Spe_HYStatic_TotalBisInfo where TestConclusion=1 and IsFood=1

and (Date between @QBusinessDate1 and @QBusinessDate2)--获取合格批次

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

if(@Num=0)--除数为0,合格率做相应处理

begin

set @AvailableRate=0

end

else

begin

set @AvailableRate=(@AvailableNum*100)/@Num--获取合格率

end

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

select @ClientNum=count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where IsFood=1

and (Date between @QBusinessDate1 and @QBusinessDate2)--获取企业数

select @CANum =count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where TestConclusion=0

and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取不合格企业数

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

if(@ClientNum=0)--除数为0,企业不合格率做相应处理

begin

set @CARate=0

end

else

begin

set @CARate=@CANum*100/@ClientNum--获取企业不合格率

end

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

insert into #tmp_table--把记录插入临时表中

values(

'00合计' ,

@Num ,

@AvailableNum ,

@AvailableRate,

@ClientNum ,

@CANum,

@CARate)

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

--新建临时表,分别存放一级类别

create table #tmp_LevelOne(NODEID int,NODENAME nvarchar(50),PARENTID int)

insert into #tmp_LevelOne

select NODEID,NODENAME,PARENTID from Spe_FoodCategory where PARENTID=0

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

declare @OneMAX int--最大ID

declare @OneMIN int--循环最小ID

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

--初始化

select @OneMAX=max(NODEID) from #tmp_LevelOne

select @OneMIN=min(NODEID) from #tmp_LevelOne

set @i=1

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

--循环类别表,按类别ID统计相关信息

while(@OneMIN

begin

if exists (select 1 from #tmp_LevelOne where NODEID=@OneMIN)

begin

select @Category=NODENAME from #tmp_LevelOne where NODEID=@OneMIN--获取类别名

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

if(len(convert(nvarchar,@i))=1)

begin

set @Category='0'+convert(nvarchar,@i)+@Category

end

else

begin

set @Category=convert(nvarchar,@i)+@Category

end

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

select @Num=count(*) from Spe_HYStatic_TotalBisInfo where CatID=@OneMIN and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取检验批次

select @AvailableNum=count(*) from Spe_HYStatic_TotalBisInfo where CatID=@OneMIN and TestConclusion=1

and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取合格批次

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

if(@Num=0)--除数为0,合格率做相应处理

begin

set @AvailableRate=0

end

else

begin

set @AvailableRate=(@AvailableNum*100)/@Num--获取合格率

end

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

select @ClientNum=count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where CatID=@OneMIN

and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取企业数

select @CANum =count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where CatID=@OneMIN

and TestConclusion=0 and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取不合格企业数

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

if(@ClientNum=0)--除数为0,企业不合格率做相应处理

begin

set @CARate=0

end

else

begin

set @CARate=@CANum*100/@ClientNum--获取企业不合格率

end

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

insert into #tmp_table--把记录插入临时表中

values(

@Category ,

@Num ,

@AvailableNum ,

@AvailableRate,

@ClientNum ,

@CANum,

@CARate)

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

--新建临时表,分别存放二级类别

create table #tmp_LevelTwo(NODEID int,NODENAME nvarchar(50),PARENTID int)

insert into #tmp_LevelTwo

select NODEID,NODENAME,PARENTID from Spe_FoodCategory where PARENTID=@OneMIN

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

declare @TwoMAX int--最大ID

declare @TwoMIN int--循环最小ID

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

--初始化

select @TwoMAX=max(NODEID) from #tmp_LevelTwo

select @TwoMIN=min(NODEID) from #tmp_LevelTwo

set @j=1

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

while(@TwoMIN

begin

if exists (select 1 from #tmp_LevelTwo where NODEID=@TwoMIN)

begin

select @Category=NODENAME from #tmp_LevelTwo where NODEID=@TwoMIN--获取类别名

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

set @Category=

(case when len(convert(nvarchar,@i))=1 then '0'+ convert(nvarchar,@i)

else convert(nvarchar,@i) end)

+(case when len(convert(nvarchar,@j))=1 then '0'+ convert(nvarchar,@j)

else convert(nvarchar,@j) end)

+@Category

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

select @Num=count(*) from Spe_HYStatic_TotalBisInfo where CatID=@TwoMIN and IsFood=1

and (Date between @QBusinessDate1 and @QBusinessDate2)--获取检验批次

select @AvailableNum=count(*) from Spe_HYStatic_TotalBisInfo where CatID=@TwoMIN and TestConclusion=1

and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取合格批次

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

if(@Num=0)--除数为0,合格率做相应处理

begin

set @AvailableRate=0

end

else

begin

set @AvailableRate=(@AvailableNum*100)/@Num--获取合格率

end

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

select @ClientNum=count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where CatID=@TwoMIN

and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取企业数

select @CANum =count(distinct BeCheckClient) from Spe_HYStatic_TotalBisInfo where CatID=@TwoMIN

and TestConclusion=0 and IsFood=1 and (Date between @QBusinessDate1 and @QBusinessDate2)--获取不合格企业数

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

if(@ClientNum=0)--除数为0,企业不合格率做相应处理

begin

set @CARate=0

end

else

begin

set @CARate=@CANum*100/@ClientNum--获取企业不合格率

end

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

insert into #tmp_table--把记录插入临时表中

values(

@Category ,

@Num ,

@AvailableNum ,

@AvailableRate,

@ClientNum ,

@CANum,

@CARate)

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

set @j=@j+1

end

set @TwoMIN=@TwoMIN+1--循环变量增1

end

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

--销毁临时表

drop table #tmp_LevelTwo

set @i=@i+1

end

set @OneMIN=@OneMIN+1--循环变量增1

end

--销毁临时表

drop table #tmp_LevelOne

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

--输出临时表

select Catagory as ' ',Corporation as '监督检验企业数(个)',Corporation_False as '查出不合格产品企业数(个)',

FalseRate as '不合格产品企业所占比例%',Batch as '检验批次', Batch_Pass as '合格批次',

PassRate as '批次合格率(%)' from #tmp_table

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

--销毁临时表

drop table #tmp_table


相关文章

  • 2大数据平台的建设
  • 大数据平台建设 大数据平台建设硬件环境 服务器环境 一.数据采集系统运行环境 大数据平台需要接入政务数据.社会数据.以及其他数据.其接入方式主要包含系统对接与爬虫采集两种方式.系统对接方式运行需要依赖数据抽取前置机与中心接口服务器:爬虫采集方式需要部署分步式爬虫专用服务器. 1. 采集前置机: 解决 ...

  • 数字证书详解
  • 数字证书 一. 什么是数字证书? 数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证.它是由一个权威机构发行的,人们可以在互联网上用它来识别对方的身份. 最简单的证书包含一个公开密钥.名称以及证书授权中心的数字签名.一般情况下证书中还包括密钥的有效时间,发证机关( ...

  • 紫光档案管理系统技术白皮书
  • 紫光档案管理系统THAMS V6.0 技术白皮书 紫光软件电子档案事业部 目 录 1. 系统简介...................................................................................................... ...

  • 集团主数据管理平台解决方案
  • 集团主数据管理解决方案 1. 基本概念 ● 主数据:是用来描述企业核心业务实体的数据,例如客户.供应商.物料.产品.员工.组织等.主数据是具有高业务价值的,应在企业内跨越各个业务部门被重复使用的数据,并且存在于多个异构的应用系统中. ● 主数据管理:包含一整套用于生成和维护主数据的规范.技术,完整的 ...

  • OracleERP求职简历模板
  • 王某某 渤海大学 Oracle ERP(软件工程硕士) 性别:女 出生年月:1989.01 民族:汉 政治面貌:党员 联系方式:158-0678-5341 电子邮件:[email protected] 求职意向及自我评价 期望从事职业:Oracle ERP功能顾问 期望工作地点:北京.上海.济南.青 ...

  • 七年级第一单元玩转家庭照片活动1
  • 第一单元 玩转家庭照片 活动1 拍摄调整照片 一. 教材分析 第一单元主要围绕照片而展开一些具体操作,而活动1首先是掌握数码照片的拍摄方法,能将相机存储卡中的照片导入到电脑中保存.能利用"美图秀秀"图像处理软件对照片进行处理.调整. 二. 学情分析 拍摄数码照片是当前比较流行的应 ...

  • 电脑网络监控系统计算机部分软件部分说明
  • 螺杆式空压机电脑网络远程监控系统 计算机软件部分说明 一 .系统说明: 电脑网络监控系统是为配合我公司开发的MAM-KY02S 空压机运行控制保护器,而开发的一套计算机控制管理软件.系统主体部分采用多文档界面.通过不同的设置,能适应不同的客户的需求.系统分为数据采集.自动控制.连网控制.数据存储.数 ...

  • 教师工作量统计系统
  • 教师工作量统计系统的研究与实现 学 校: 班 级: 姓 名: 摘 要 随着计算机及网络技术的飞速发展,Internet 应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大.教师工作量统计系统是典型的信息管理系统(MIS ), 其开发主要包括后台数据库的建立和维护以及前 ...

  • 学籍管理系统1
  • 学籍管理系统 需求说明书 撰写:________________ 校对:________________ 审核:________________ 编写日期: 年月 日 目录 1. 引言 1.1 编写目的 ................................................ ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn