注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

我的最复杂的存储过程  

2009-09-29 22:57:18|  分类: SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

--查询某个是否属于什么地区
create function ifBelongThePlace(@customerID numeric(19,0), @placeID numeric(19,0))
returns int as
begin
  declare @flag int
  set @flag=0
 
 
 
 
  return @flag
end


--得到大合同下的所有子项目(有状态)的金额
create function calSumSmallProjectMoney(@bigContactID numeric(19,0))
returns numeric(19,2) as
begin
 declare @sumMoney numeric(19,0)
 set @sumMoney=(
    select sum(_XM项目金额-_XM商务折扣)
    from _X_需求最新合同 where _X大合同ID =@bigContactID
    and _XM项目状态>
  )
 return @sumMoney
end

 


create procedure calSaleMoney
(
    @place1 numeric(19,0), -- 上海
 @place2 numeric(19,0), -- 北京
 @place3 numeric(19,0), -- 其他
 @startTime datetime,
 @endTime datetime
)
as
begin  
declare @sumMoney1 numeric(19,2)
declare @sumMoney2 numeric(19,2)
declare @sumMoney3 numeric(19,2)
 
 
declare @tempContactID numeric(19,0)
declare @tempCustomerID numeric(19,0)
declare @tempMoney numeric(19,0)
declare @tempTotalProMoney numeric(19,0)
 ---初始化
 set @sumMoney1=0
 set @sumMoney2=0
 set @sumMoney3=0
 
 ---计算非大合同的金额
 set @sumMoney1=@sumMoney1+(select sum(_XM项目金额-_XM商务折扣)
                             from _X_需求最新合同 where
        (_X大合同ID is null or _X大合同ID ='' ) and
         _XM项目状态>   and
        (_Con合同确定日期 between @startTime and @endTime ) and
         ifBelongThePlace(_X客户ID,@place1)>0
         )
       
 set @sumMoney2=@sumMoney2+(select sum(_XM项目金额-_XM商务折扣)
                             from _X_需求最新合同 where
        (_X大合同ID is null or _X大合同ID ='' ) and
         _XM项目状态>   and
        (_Con合同确定日期 between @startTime and @endTime ) and
         ifBelongThePlace(_X客户ID,@place2)>0
         )
 
  set @sumMoney3=@sumMoney3+(select sum(_XM项目金额-_XM商务折扣)
                             from _X_需求最新合同 where
        (_X大合同ID is null or _X大合同ID ='' ) and
         _XM项目状态>   and
        (_Con合同确定日期 between @startTime and @endTime ) and
         ifBelongThePlace(_X客户ID,@place3)>0
         )
       

---计算大小合同 place1
declare bigContactCursor1 cursor   
for   select  项目大合同ID,项目大合同客户ID,项目大合同金额 
      from 项目大合同表 where 项目大合同预付款状态>  and ifBelongThePlace(项目大合同客户ID,@place1)>0
   and (项目大合同确定日期 between @startTime and @endTime)

   --提取分析里面的数据
  open   bigContactCursor1
  fetch bigContactCursor1 into @tempContactID, @tempCustomerID,  @tempMoney
  while (@@FETCH_STATUS=0)
  begin
      set @tempTotalProMoney=calSumSmallProjectMoney(@tempContactID)
            if @tempMoney> @tempTotalProMoney
      set @sumMoney1=@sumMoney1+@tempMoney
   else    
      set @sumMoney1=@sumMoney1+@tempTotalProMoney
  end    
close bigContactCursor1
deallocate   bigContactCursor1   


---计算大小合同 place2
declare bigContactCursor2 cursor   
for   select  项目大合同ID,项目大合同客户ID,项目大合同金额 
      from 项目大合同表 where 项目大合同预付款状态>  and ifBelongThePlace(项目大合同客户ID,@place2)>0
   and (项目大合同确定日期 between @startTime and @endTime)

   --提取分析里面的数据
  open   bigContactCursor2
  fetch bigContactCursor2 into @tempContactID, @tempCustomerID,  @tempMoney
  while (@@FETCH_STATUS=0)
  begin
      set @tempTotalProMoney=calSumSmallProjectMoney(@tempContactID)
            if @tempMoney > @tempTotalProMoney
      set @sumMoney2=@sumMoney2+@tempMoney
   else    
      set @sumMoney2=@sumMoney2+@tempTotalProMoney
  end    
close bigContactCursor2
deallocate   bigContactCursor2 

---计算大小合同 place3
declare bigContactCursor3 cursor   
for   select  项目大合同ID,项目大合同客户ID,项目大合同金额 
      from 项目大合同表 where 项目大合同预付款状态>  and ifBelongThePlace(项目大合同客户ID,@place3)>0
   and (项目大合同确定日期 between @startTime and @endTime)

   --提取分析里面的数据
  open   bigContactCursor3
  fetch bigContactCursor3 into @tempContactID, @tempCustomerID,  @tempMoney
  while (@@FETCH_STATUS=0)
  begin
      set @tempTotalProMoney=calSumSmallProjectMoney(@tempContactID)
            if @tempMoney > @tempTotalProMoney
      set @sumMoney3=@sumMoney3+@tempMoney
   else    
      set @sumMoney3=@sumMoney3+@tempTotalProMoney
  end    
close bigContactCursor3
deallocate   bigContactCursor3 

--返回最终数据集
--结束存储过程
select @sumMoney1,@sumMoney2,@sumMoney3

end

 


create function TestFunction(@projectID varchar(50))
RETURNS @rt table(testID int , projectID varchar(100), testDate datetime)
as
begin
  declare @TmpTable table(testID int identity(1,1), projectID varchar(100), testDate datetime)
 
  insert into @TmpTable select  _XM项目ID,  _XM记录增加日期 from _P_项目表 where _XM项目ID=@projectID
 
  insert into @rt
  select * from @TmpTable
  return 
 
end

 


create   procedure   prostu    
as
declare @项要ID numeric(19,0)
declare @项要项目号 varchar(100)
declare @t table (t3 numeric(19,0) identity(1,1), t1 numeric(19,0), t2  varchar(100), t4 datetime default(getdate()))
declare testCursor cursor

for select 项要ID, 项要项目号 from  项目要求内容表 where 项要ID<38

open   testCursor
fetch testCursor into @项要ID, @项要项目号
while (@@FETCH_STATUS=0)
   begin
    /* print @项要ID
     print @项要项目号  */
     insert into @t (t1, t2) values(@项要ID+100,@项要项目号+'xx')   
     fetch testCursor into  @项要ID, @项要项目号
   end
close testCursor
deallocate   testCursor
select * from @t

exec prostu

  评论这张
 
阅读(783)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017