按类别统计
单号             产量                 记件 
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 

解决方案 »

  1.   

    create table test(DH varchar(20),CL int,JJ varchar(20))
    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*/