rep_daqjcrb

 

SET  QUOTED_IDENTIFIER  ON  
GO
SET  ANSI_NULLS  ON  
GO

-- 漳村煤矿安全监控日报表 2008-02-19
ALTER     procedure  rep_daqjcrb
(
    
@kjid   int   =   2 ,
    
@year   int   =   2008 ,
    
@month   int   =   1 ,
    
@day   int   =   25
)
as  
    
SET  NOCOUNT  ON  
    
    
create   table  #temp_dt(
        prow 
int   PRIMARY   KEY ,
        t1 
nvarchar ( 100 ),t2  real ,t3  real ,t4  nvarchar ( 20 ),t5  int ,t6  nvarchar ( 20 ),t7  int ,t8   nvarchar ( 20 ),t9  nvarchar ( 20 ),
        t10 
nvarchar ( 100 ),t11  real ,t12  real ,t13  nvarchar ( 20 ),t14  int ,t15  nvarchar ( 20 ),t16  int ,t17   nvarchar ( 20 ),t18  nvarchar ( 20 ),
        t19 
nvarchar ( 100 ),t20  real ,t21  real ,t22  nvarchar ( 20 ),t23  int ,t24  nvarchar ( 20 ),
        t25 
nvarchar ( 100 ),t26  real ,t27  nvarchar ( 20 ),t28  nvarchar ( 20 )
    );
    
declare   @PTPROPCH4   int , @PTPROPCO   int , @PTSTATEKD   int , @PTSTATEBJ   int , @PTSTATEDD   int , @PTSTATEDD2   int --  KD 饋電; bj  報警;dd:斷電 
     declare   @start   datetime , @end   datetime ;
    
declare   @rowmax   int , @row1   int , @row2   int , @row3   int , @row4   int ;
    
declare      @ptid   nvarchar ( 100 ), @ptplace   nvarchar ( 100 ), @ptprop   int @cxcount   int , @maxdata   real , @smdata   real , @pjdata   real , @begintime   datetime , @endtime   datetime , @ptstate   int ;
    
declare   @ptid2   nvarchar ( 100 ), @ptplace2   nvarchar ( 100 ), @ptprop2   int --  上次循環測點
     declare   @maxdata2   real , @smdata2   real , @pjdata2   real , @pjdatasum   real , @cxcountsum   int , @maxdatatime   datetime ;
    
declare   @bjcountsum   int , @bjtimesum   int , @ddcountsum   int , @ddtimesum   int , @kdcountsum   int , @kdtimesum   int , @kdtime   datetime ;
    
declare   @difftime   int ;
    
--   設置常量
     set   @PTPROPCH4   =   1 set   @PTPROPCO   =   4 ;
    
set   @PTSTATEKD   =   4 set   @PTSTATEBJ   =   1 set   @PTSTATEDD   =   2 ;
    
set   @PTSTATEDD2   =   3 ;
    
--   初始化變量
     set   @rowmax   =   0 set   @row1    =   0 set   @row2   =   0 set   @row3   =   0 set   @row4   =   0 ;
    
set   @bjcountsum   =   0 set   @bjtimesum   =   0 set   @ddcountsum   =   0 set   @ddtimesum   =   0 set   @kdcountsum   =   0 set   @kdtimesum   =   0 ;
    
set   @ptid2    =   '' ;
    
--   初始化日期
     set   @start   =   cast ( cast ( @year   as   varchar ) + ' - ' + cast ( @month   as   varchar ) + ' - ' + cast ( @day   as   varchar as   datetime );
    
set   @end     =   DATEADD ( day , 1 , @start );
    
--  聲明遊標
     declare  myCursor  cursor   for  
        
select  ptid,ptplace,ptprop,cxcount,maxdata,smdata,pjdata,begintime,endtime,ptstate 
        
from  KJ95cxdt 
        
where  kjid  =   @kjid   and  begintime >= @start   and  begintime  <=   @end  
        
and  (ptprop = @PTPROPCH4   or  ptprop = @PTPROPCO   or  ptstate = @PTSTATEKD
        
and  ptstate  <=   @PTSTATEKD
        
order   by  ptid,begintime

    
open  myCursor ;
    
FETCH   NEXT   FROM  myCursor  into   @ptid , @ptplace , @ptprop , @cxcount , @maxdata , @smdata , @pjdata , @begintime , @endtime , @ptstate ;
    
    
WHILE   @@FETCH_STATUS   =   0
    
begin  
        
--  單次循環
         set   @difftime   =   datediff (millisecond, @begintime , @endtime );
        
--  步驟1 處理上次測點
         if   @ptid2   <>   @ptid  
        
begin
            
--  1、處理上個測點數據 
             if   @ptid2   <>   ''
            
begin
                
set   @pjdata2   =   @pjdatasum / @cxcountsum ;
                
--  饋電
                 if   @kdcountsum   > 0
                
begin
                    
if   @row4   >=   @rowmax
                    
begin
                        
set   @rowmax   =   @rowmax   +   1 ;
                        
set   @row4   =   @rowmax ;
                        
insert   into  #temp_dt(prow,t25,t26,t27,t28)  values  ( @rowmax , @ptplace2 , @kdcountsum , convert ( varchar , @kdtime , 108 ),dbo.f_TimeSpan2Var( @kdtimesum ));
                    
end
                    
else
                    
begin
                        
set   @row4   =   @row4   +   1 ;
                        
update  #temp_dt  set  t25  =   @ptplace2 ,t26  =   @kdcountsum ,t27  =   convert ( varchar , @kdtime , 108 ),t28  =  dbo.f_TimeSpan2Var( @kdtimesum where  prow  =   @row4 ;
                    
end
                
end
                
--  根據測點類型判斷威瓦斯或者CO
                 if   @ptprop2   =   @PTPROPCO   --  CO
                 begin
                    
if   @row3   >=   @rowmax
                    
begin
                        
set   @rowmax   =   @rowmax   +   1 ;
                        
set   @row3   =   @rowmax ;
                        
insert   into  #temp_dt(prow,t19,t20,t21,t22,t23,t24)  values  ( @rowmax , @ptplace2 , @maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ));
                    
end
                    
else
                    
begin
                        
set   @row3   =   @row3   +   1 ;
                        
update  #temp_dt  set  t19  =   @ptplace2 ,t20  =   @maxdata2 ,t21  =   @pjdata2 ,t22  =   convert ( varchar , @maxdatatime , 108 ),t23  =   @bjcountsum ,t24  =  dbo.f_TimeSpan2Var( @bjtimesum where  prow  =   @row3 ;
                    
end
                
end
                
else                   --  瓦斯
                 begin
                    
if   @row1   >   @row2
                    
begin   --  取用@row2 從t10到t18
                         if   @row2   >=   @rowmax
                        
begin
                            
set   @rowmax   =   @rowmax   +   1 ;
                            
set   @row2   =   @rowmax ;
                            
insert   into  #temp_dt(prow,t10,t11,t12,t13,t14,t15,t16,t17,t18)  values  ( @rowmax , @ptplace2 ,
                            
@maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ),
                            
@ddcountsum ,dbo.f_TimeSpan2Var( @ddtimesum ), '' );
                        
end
                        
else
                        
begin
                            
set   @row2   =   @row2   +   1 ;
                            
update  #temp_dt  set  t10  =   @ptplace2 ,t11  =   @maxdata2 ,t12  =   @pjdata2 ,t13  =   convert ( varchar , @maxdatatime , 108 ),t14  =   @bjcountsum ,
                            t15 
=  dbo.f_TimeSpan2Var( @bjtimesum ),t16  =   @ddcountsum ,t17  =  dbo.f_TimeSpan2Var( @ddtimesum ),t18  =   ''  
                            
where  prow  =   @row2 ;
                        
end
                    
end
                    
else
                    
begin   --  取用@row1 從t1到t9
                         if   @row1   >=   @rowmax
                        
begin
                            
set   @rowmax   =   @rowmax   +   1 ;
                            
set   @row1   =   @rowmax ;
                            
insert   into  #temp_dt(prow,t1,t2,t3,t4,t5,t6,t7,t8,t9)  values  ( @rowmax , @ptplace2 ,
                            
@maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ),
                            
@ddcountsum ,dbo.f_TimeSpan2Var( @ddtimesum ), '' );
                        
end
                        
else
                        
begin
                            
set   @row1   =   @row1   +   1 ;
                            
update  #temp_dt  set  t1  =   @ptplace2 ,t2  =   @maxdata2 ,t3  =   @pjdata2 ,t4  =   convert ( varchar , @maxdatatime , 108 ),t5  =   @bjcountsum ,
                            t6 
=  dbo.f_TimeSpan2Var( @bjtimesum ),t7  =   @ddcountsum ,t8  =  dbo.f_TimeSpan2Var( @ddtimesum ),t9  =   ''  
                            
where  prow  =   @row1 ;
                        
end
                    
end
                
end
            
end
            
--  2、設置測點編碼、名稱、類型
             set   @ptid2      =   @ptid ;
            
set   @ptplace2   =   @ptplace ;
            
set   @ptprop2    =   @ptprop ;
            
set   @bjcountsum   =   0 set   @bjtimesum   =   0 set   @ddcountsum   =   0 set   @ddtimesum   =   0 set   @kdcountsum   =   0 set   @kdtimesum   =   0 ;
            
set   @maxdata2   =   0 set   @smdata2   =   0 set   @pjdata2   =   0 set   @pjdatasum   =   0 set   @cxcountsum   =   0 ;
            
set   @maxdatatime   =   @begintime ;
        
end
        
--  步驟2 處理饋電
         if   @ptstate = @PTSTATEKD
        
begin
            
set   @kdcountsum   =   @kdcountsum   +   @cxcount ;
            
set   @kdtime   =   @begintime ;
            
set   @kdtimesum   =   @kdtimesum   +   @difftime ;
        
end
        
--  步驟3 處理瓦斯或CO
         --  平均值
         set   @pjdatasum   =   @pjdatasum   +   @pjdata * @cxcount ;
        
set   @cxcountsum   =   @cxcountsum   +   @cxcount ;
        
--  最大值
         if   @maxdata > @maxdata2
        
begin
            
set   @maxdata2   =   @maxdata ;
            
set   @maxdatatime   =   @begintime ;
        
end
        
--  報警
         if   @ptstate   =   @PTSTATEBJ
        
begin
            
set   @bjcountsum   =   @bjcountsum   +   @cxcount ;
            
set   @bjtimesum   =   @bjtimesum   +   @difftime ;
        
end
        
--  斷電
         if   @ptstate   =   @PTSTATEDD   or   @ptstate   =   @PTSTATEDD2
        
begin
            
set   @ddcountsum   =   @ddcountsum   +   @cxcount ;
            
set   @ddtimesum   =   @ddtimesum   +   @difftime ;
        
end
        
FETCH   NEXT   FROM  myCursor  into   @ptid , @ptplace , @ptprop , @cxcount , @maxdata , @smdata , @pjdata , @begintime , @endtime , @ptstate ;
    
end
    
DEALLOCATE  myCursor;
    
--  處理最後循環的測點
     set   @pjdata2   =   @pjdatasum / @cxcountsum ;
    
--  饋電
     if   @kdcountsum   > 0
    
begin
        
if   @row4   >=   @rowmax
        
begin
            
set   @rowmax   =   @rowmax   +   1 ;
            
set   @row4   =   @rowmax ;
            
insert   into  #temp_dt(prow,t25,t26,t27,t28)  values  ( @rowmax , @ptplace2 , @kdcountsum , convert ( varchar , @kdtime , 108 ),dbo.f_TimeSpan2Var( @kdtimesum ));
        
end
        
else
        
begin
            
set   @row4   =   @row4   +   1 ;
            
update  #temp_dt  set  t25  =   @ptplace2 ,t26  =   @kdcountsum ,t27  =   convert ( varchar , @kdtime , 108 ),t28  =  dbo.f_TimeSpan2Var( @kdtimesum where  prow  =   @row4 ;
        
end
    
end
    
--  根據測點類型判斷威瓦斯或者CO
     if   @ptprop2   =   @PTPROPCO   --  CO
     begin
        
if   @row3   >=   @rowmax
        
begin
            
set   @rowmax   =   @rowmax   +   1 ;
            
set   @row3   =   @rowmax ;
            
insert   into  #temp_dt(prow,t19,t20,t21,t22,t23,t24)  values  ( @rowmax , @ptplace2 , @maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ));
        
end
        
else
        
begin
            
set   @row3   =   @row3   +   1 ;
            
update  #temp_dt  set  t19  =   @ptplace2 ,t20  =   @maxdata2 ,t21  =   @pjdata2 ,t22  =   convert ( varchar , @maxdatatime , 108 ),t23  =   @bjcountsum ,t24  =  dbo.f_TimeSpan2Var( @bjtimesum where  prow  =   @row3 ;
        
end
    
end
    
else                   --  瓦斯
     begin
        
if   @row1   >=   @row2
        
begin   --  取用@row2 從t10到t18
             if   @row2   >=   @rowmax
            
begin
                
set   @rowmax   =   @rowmax   +   1 ;
                
set   @row2   =   @rowmax ;
                
insert   into  #temp_dt(prow,t10,t11,t12,t13,t14,t15,t16,t17,t18)  values  ( @rowmax , @ptplace2 ,
                
@maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ),
                
@ddcountsum ,dbo.f_TimeSpan2Var( @ddtimesum ), '' );
            
end
            
else
            
begin
                
set   @row2   =   @row2   +   1 ;
                
update  #temp_dt  set  t10  =   @ptplace2 ,t11  =   @maxdata2 ,t12  =   @pjdata2 ,t13  =   convert ( varchar , @maxdatatime , 108 ),t14  =   @bjcountsum ,
                t15 
=  dbo.f_TimeSpan2Var( @bjtimesum ),t16  =   @ddcountsum ,t17  =  dbo.f_TimeSpan2Var( @ddtimesum ),t18  =   ''  
                
where  prow  =   @row2 ;
            
end
        
end
        
else
        
begin   --  取用@row1 從t1到t9
             if   @row1   >=   @rowmax
            
begin
                
set   @rowmax   =   @rowmax   +   1 ;
                
set   @row1   =   @rowmax ;
                
insert   into  #temp_dt(prow,t1,t2,t3,t4,t5,t6,t7,t8,t9)  values  ( @rowmax , @ptplace2 ,
                
@maxdata2 , @pjdata2 , convert ( varchar , @maxdatatime , 108 ), @bjcountsum ,dbo.f_TimeSpan2Var( @bjtimesum ),
                
@ddcountsum ,dbo.f_TimeSpan2Var( @ddtimesum ), '' );
            
end
            
else
            
begin
                
set   @row1   =   @row1   +   1 ;
                
update  #temp_dt  set  t1  =   @ptplace2 ,t2  =   @maxdata2 ,t3  =   @pjdata2 ,t4  =   convert ( varchar , @maxdatatime , 108 ),t5  =   @bjcountsum ,
                t6 
=  dbo.f_TimeSpan2Var( @bjtimesum ),t7  =   @ddcountsum ,t8  =  dbo.f_TimeSpan2Var( @ddtimesum ),t9  =   ''  
                
where  prow  =   @row1 ;
            
end
        
end
    
end
    
select   *   from  #temp_dt;
    
return ;


GO
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值