• 存储过程虚拟表


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

    如下:

    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

  • 相关阅读:
    17-Flutter移动电商实战-首页_楼层区域的编写
    16-Flutter移动电商实战-切换后页面状态的保持AutomaticKeepAliveClientMixin
    15-Flutter移动电商实战-商品推荐区域制作
    AndroidStudio中Flutter打包APK
    windows下dos窗口实现持续ping显示时间保存至日志
    14-Flutter移动电商实战-ADBanner组件的编写
    13-Flutter移动电商实战-ADBanner组件的编写
    12-Flutter移动电商实战-首页导航区域编写
    11-Flutter移动电商实战-首页_屏幕适配方案和制作
    10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果
  • 原文地址:https://www.cnblogs.com/qfb620/p/3087676.html
Copyright © 2020-2023  润新知