--人均产量比较表
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' 附近有语法错误。
解决方案 »
- sql多列查询,返回list
- 有关触发器的问题
- 普通的PC上安装SQL2005企业版,提示“处理器类型不支持该安装包”,PC是DELLOPTIPLEX 755,CPU为Intel Core2 2.4GHz
- 设置sqlserver2005的有关命令是什么?请高手指点
- 好像是小问题,可是.....
- 求高人!~~
- 国内ERP产品,U9和EAS哪个更强?各自优缺点有哪些?请大虾指导。。。
- SQL2005双机通过双光纤HBA卡连接光纤磁盘柜,关闭一个光纤交换机发生的奇怪问题,请高手作答。
- 下行取上一行的记录问题
- 连开3贴,解决!! 分全送
- 请大家帮帮忙,帮小弟解决一下问题,感激不尽
- SQL Server2000中,SQL语句中如何 把两个结果集 分组?
--人均产量比较表
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)