存储过程--虚拟表

 一般用于报表,前提:报表中部分是从一些表中查询而得,而另一部分是通过各种计算而得,这种情况下,可用此存储过程。纯属个人记录,不供大家学习。

如下:

USE [changyuan]

GO

/****** Object:  StoredProcedure [dbo].[sp_adv_qy_jpdata_Select_byDates]    Script Date: 05/19/2013 21:52:49 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

 

ALTER PROC [dbo].[sp_adv_qy_jpdata_Select_byDates] --[sp_adv_qy_jpdata_Select_byDates] "2006-11-6", "2006-11-13"  ,5         

(             

@time1 datetime,             

@time2 datetime=null,             

@qy int=null                    

)              

as

--天数     

declare @i int   

set @i=0 

--select @i= DATEDIFF(day,@time1,@time2)     

--set @i=@i+1   

--print @i   

 

--表1 显示最终结果    

CREATE TABLE #TABLE            

(argname nvarchar(100) , lshds int DEFAULT ((0)), renshu int DEFAULT ((0)),ytjs int DEFAULT ((0)), ywcs int DEFAULT ((0)), wwcs int DEFAULT ((0)), wcl nvarchar(100) DEFAULT ((0)),id int )           

 

--插入所有分公司 

insert into #TABLE (id,argname) 

select id,argname from tb_area where fatherid='1' 

 

--分公司所有店的提交数 

CREATE TABLE #TABLE1            

(eid int, qy int)  

 

--时间段内的所有周一 

set @time1=(select(convert(datetime,@time1)-datepart(dw,convert(datetime,@time1))+2))  

  

while(@time1 <=@time2)         

begin    

 

if((select datepart(dw,@time1))=2)   

begin   

 

insert into #TABLE1 

select distinct eid, (select fatherid from tb_area where id=(select fatherid from tb_area where id=(select lshfgs from tb_rt where lshid=shop))) as qy from jpdata left join employee on jpdata.eid=employee.employeeid where employee.available=1 and salesdate = @time1 

 

--select distinct salesdate, (select fatherid from tb_area where id=(select fatherid from tb_area where id=(select lshfgs from tb_rt where lshid=shop))) as qy from jpdata where salesdate = @time1 

 

set @time1=DateADD(day,1,@time1) 

set @i=@i+1      

end    

 

 

 

 

set @time1=@time1+1   

end       

print @i     

      

--select * from #TABLE1 

--岗位人数   

update #TABLE set renshu=isnull((select count(*) from employee where (available=1 or (available=0 and lzhshj > ''+cast(''+@time2 + ' 23:59' as varchar)+'')) and  employee.qy=#TABLE.id ),0) from employee where  available=1 and  employee.qy=#TABLE.id 

 

--零售店数   

update #TABLE set lshds=isnull((select count(*) from tb_rt where  lshq=#TABLE.id ),0) from tb_rt where lshq=#TABLE.id   

 

--应提交数     

update #TABLE set ytjs=renshu*@i  

     

--已提交数     

update #table set ywcs=(select count(*) from #table1 where #TABLE1.qy=#table.id) from #TABLE1 where #table1.qy=#table.id 

     

--未提交数     

update #TABLE set wwcs=(ytjs-ywcs)     

     

--提交完成率     

update #TABLE set wcl=round(convert(float,ywcs)*100/(CASE WHEN ytjs=0 THEN 1 ELSE ytjs END) ,2)     

      

if @qy is not null and @qy <>''   

begin    

select * from #table where id=@qy   

end   

else   

begin   

select * from #table  

end     

--drop table #table 

--drop table #table1

posted on 2013-05-19 21:59  秋天  阅读(1185)  评论(0编辑  收藏  举报

导航