按类别统计
单号 产量 记件
DH CL JJ
0711012 160.00 L0406
0711013 200.00 L0708
0711014 900.00 L040608X0709 说明:L、X各代表不同的工种,工号为两位数,如04、06
例:L040608X0709 其中L类有三人,工号分别为04 、06、08, X类有两人,工号为07、09
产量的分配
例:0711014 900.00 L040608X0709
L类每人的产量为:900/3=300 即04、06、08平分产量
X类07和09的产量:900/2=450 想统计所有单号合计起来的不同工种的个人产量:
L04 380
L06 380
L07 100
X07 450
L08 400
X09 450
单号 产量 记件
DH CL JJ
0711012 160.00 L0406
0711013 200.00 L0708
0711014 900.00 L040608X0709 说明:L、X各代表不同的工种,工号为两位数,如04、06
例:L040608X0709 其中L类有三人,工号分别为04 、06、08, X类有两人,工号为07、09
产量的分配
例:0711014 900.00 L040608X0709
L类每人的产量为:900/3=300 即04、06、08平分产量
X类07和09的产量:900/2=450 想统计所有单号合计起来的不同工种的个人产量:
L04 380
L06 380
L07 100
X07 450
L08 400
X09 450
insert into test values('0711012',160.00,'L0406' )
insert into test values('0711013',200.00,'L0708X05' )
insert into test values('0711014',900.00,'L040608X0709')
gocreate proc wsp
as
declare @dh varchar(20)
declare @cl int
declare @jj varchar(20)
declare @zz varchar--工种
declare @test table(DH varchar(20),CL int,JJ varchar(20))
declare cur cursor for select dh,cl,jj from test
open cur
fetch next from cur into @dh,@cl,@jj
while(@@fetch_status=0)
begin
while(len(@jj)>0)
begin
if(patindex('%[^0-9]%',@jj)=1)
begin
set @zz=left(@jj,1)
set @jj=right(@jj,len(@jj)-1)
end
insert into @test select @dh,@cl,@zz+left(@jj,2)
set @jj=right(@jj,len(@jj)-2)
end
fetch next from cur into @dh,@cl,@jj
end
close cur
deallocate cur
update @test set cl=cl/(select count(1) from @test where dh=a.dh and left(jj,1)=left(a.jj,1) group by left(jj,1)) from @test a
select jj,sum(cl) from @test group by jj
go
exec wsp
/*结果:
jj
-------------------- -----------
L04 380
L06 380
L07 100
L08 400
X05 200
X07 450
X09 450*/