--人均产量比较表
alter proc wfg_sp_S_Bothyield (@iYear int,@iPeriod int)
as
set nocount on
set ansi_warnings offcreate table #Average(FID int identity(1,1),
FCategory varchar(150),
FAqty decimal(18,2)
)
--年人平均产量=年平均产量/年平均人数
insert into #Average(FCategory,FAqty)
   (select m.FCategory,case when isnull(m.fpcount,0)=0 then 0 else convert(decimal(18,2),isnull((n.fycount),0)/isnull((m.fpcount),0)) end faqty from 
       (select FCategory,case when isnull(@iPeriod,0)=0 then 0 else convert(decimal(18,0),isnull(sum(FNumber),0)/isnull(@iPeriod,0)) end fpcount  from wfg_t_S_Performance_Basic where FYear=@iYear group by FCategory) m
         inner join 
       (select FDepart,case when isnull(@iPeriod,0)=0 then 0 else convert(decimal(18,2),isnull(sum(FYield),0)/isnull(@iPeriod,0)) end fycount from wfg_t_S_Yield_Basic where FYear=@iYear group by FDepart) n
     on m.FCategory=n.FDepart)--select * from #Average
select a.FCategory '一级部门',
       isnull(sum(a.FNumber),0) '车间人数',
       isnull(sum(a.Fshiji),0)+isnull(sum(a.FWTWage),0)+isnull(sum(a.FSundayTWage),0)+isnull(sum(a.FFTWage),0) '总工时',
       isnull(sum(a.FWagesShouldbe),0) '工资',
       isnull(sum(b.FAmt),0) '劳动保险',
       isnull(sum(a.FWagesShouldbe),0)+isnull(sum(b.FAmt),0) '总成本',
       case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(sum(a.FWagesShouldbe),0)/isnull(sum(a.FNumber),0)) end '平均人工成本',
    isnull(c.Fshijiqty,0) '实际产量',
       case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end convert(varchar(100),@iYear)+'月人均产量',
       isnull(d.FAqty,0) '1-12月平均',
       case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end convert(varchar(100),@iPeriod)+'月人均产量',
       (case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end)-isnull(d.FAqty,0) '差额'
  from wfg_t_S_Performance_Basic a inner join wfg_t_S_Insurance_Basic b on a.FCategory=b.FCategory inner join (select FDepart,sum(FYield) from wfg_t_S_Yield_Basic where FYear=@iYear and FPeriod=@iPeriod group by FDepart) c on a.FCategory=c.FDepart inner join #Average d on a.FCategory=d.FCategory
  where FYear=@iYear and FPeriod=@iPeriod group by a.FCategory
报错-----------
消息 102,级别 15,状态 1,过程 wfg_sp_S_Bothyield,第 31 行
' ' 附近有语法错误。
消息 102,级别 15,状态 1,过程 wfg_sp_S_Bothyield,第 36 行
'c' 附近有语法错误。

解决方案 »

  1.   


    --人均产量比较表
    alter proc wfg_sp_S_Bothyield 
    (@iYear int,@iPeriod int)
    as
    set nocount on
    set ansi_warnings offdeclare @col1 varchar(100),
    @col2 varchar(100),
    @sql varchar(8000)
    set @col1=ltrim(@iYear)+'月人均产量'
    set @col2=ltrim(@iPeriod)+'月人均产量'
    set @sql=''create table #Average(FID int identity(1,1),
    FCategory varchar(150),
    FAqty decimal(18,2)
    )
    --年人平均产量=年平均产量/年平均人数
    insert into #Average(FCategory,FAqty)
       (select m.FCategory,case when isnull(m.fpcount,0)=0 then 0 else convert(decimal(18,2),isnull((n.fycount),0)/isnull((m.fpcount),0)) end faqty from 
           (select FCategory,case when isnull(@iPeriod,0)=0 then 0 else convert(decimal(18,0),isnull(sum(FNumber),0)/isnull(@iPeriod,0)) end fpcount  from wfg_t_S_Performance_Basic where FYear=@iYear group by FCategory) m
             inner join 
           (select FDepart,case when isnull(@iPeriod,0)=0 then 0 else convert(decimal(18,2),isnull(sum(FYield),0)/isnull(@iPeriod,0)) end fycount from wfg_t_S_Yield_Basic where FYear=@iYear group by FDepart) n
         on m.FCategory=n.FDepart)--select * from #Averageset @sql='
    select a.FCategory ''一级部门'',
           isnull(sum(a.FNumber),0) ''车间人数'',
           isnull(sum(a.Fshiji),0)+isnull(sum(a.FWTWage),0)+isnull(sum(a.FSundayTWage),0)+isnull(sum(a.FFTWage),0) ''总工时'',
           isnull(sum(a.FWagesShouldbe),0) ''工资'',
           isnull(sum(b.FAmt),0) ''劳动保险'',
           isnull(sum(a.FWagesShouldbe),0)+isnull(sum(b.FAmt),0) ''总成本'',
           case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(sum(a.FWagesShouldbe),0)/isnull(sum(a.FNumber),0)) end ''平均人工成本'',
           isnull(c.Fshijiqty,0) ''实际产量'',
           case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end '+@col1+', 
           isnull(d.FAqty,0) ''1-12月平均'',
           case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end '+@col2+',  
           (case when isnull(sum(a.FNumber),0)=0 then 0 else convert(decimal(18,2),isnull(c.Fshijiqty,0)/isnull(sum(a.FNumber),0)) end)-isnull(d.FAqty,0) ''差额''
    from wfg_t_S_Performance_Basic a 
    inner join wfg_t_S_Insurance_Basic b on a.FCategory=b.FCategory 
    inner join 
    (
    select FDepart,sum(FYield) 
    from wfg_t_S_Yield_Basic 
    where FYear='+ltrim(@iYear)+' 
    and FPeriod='+ltrim(@iPeriod)+' 
    group by FDepart
    )c on a.FCategory=c.FDepart 
    inner join #Average d on a.FCategory=d.FCategory
    where FYear='+ltrim(@iYear)+'  
    and FPeriod='+ltrim(@iPeriod)+' 
    group by a.FCategory'
    exec(@sql)