原表:
deptname teamname smoney teamrs rate
大哥 ss1 47368 11 0.5742
大哥 ss2 15630 13 0.1603
二弟 ss3 60000 null null
三弟 ss4 73458 8 1.2243
三弟 ss5 123290 8 2.0548
三弟 ss6 43180 5 1.1515
三弟 ss7 26080 5 0.6955
三弟 ss8 130540 5 3.4811
三弟 ss9 97150 6 2.1589
三弟 ss10 49023 6 1.0894
三弟 ss11 3760 null null
三弟 ss12 14500 6 0.3222
三弟 ss13 9613 6 0.2136
小师妹 ss14 19890 5 0.5304
小师妹 ss15 19930 5 0.5315
小师妹 ss16 60000 5 1.6要求:根据deptname分组,统计sum(smoney)/sum(teamrs)放在后面的列,要出现如下结果:
deptname teamname smoney teamrs rate rate2
大哥 ss1 47368 11 0.5742 2426
大哥 ss2 15630 13 0.1603 2426
二弟 ss3 60000 null null null
三弟 ss4 73458 8 1.2243 10374
三弟 ss5 123290 8 2.0548 10374
三弟 ss6 43180 5 1.1515 10374
三弟 ss7 26080 5 0.6955 10374
三弟 ss8 130540 5 3.4811 10374
三弟 ss9 97150 6 2.1589 10374
三弟 ss10 49023 6 1.0894 10374
三弟 ss11 3760 null null 10374
三弟 ss12 14500 6 0.3222 10374
三弟 ss13 9613 6 0.2136 10374
小师妹 ss14 19890 5 0.5304 6654
小师妹 ss15 19930 5 0.5315 6654
小师妹 ss16 60000 5 1.6 6654

解决方案 »

  1.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([deptname] varchar(6),[teamname] varchar(4),[smoney] int,[teamrs] int,[rate] numeric(5,4))
    insert [tb]
    select '大哥','ss1',47368,11,0.5742 union all
    select '大哥','ss2',15630,13,0.1603 union all
    select '二弟','ss3',60000,null,null union all
    select '三弟','ss4',73458,8,1.2243 union all
    select '三弟','ss5',123290,8,2.0548 union all
    select '三弟','ss6',43180,5,1.1515 union all
    select '三弟','ss7',26080,5,0.6955 union all
    select '三弟','ss8',130540,5,3.4811 union all
    select '三弟','ss9',97150,6,2.1589 union all
    select '三弟','ss10',49023,6,1.0894 union all
    select '三弟','ss11',3760,null,null union all
    select '三弟','ss12',14500,6,0.3222 union all
    select '三弟','ss13',9613,6,0.2136 union all
    select '小师妹','ss14',19890,5,0.5304 union all
    select '小师妹','ss15',19930,5,0.5315 union all
    select '小师妹','ss16',60000,5,1.6
     
    ---查询---
    select a.*,b.rate2
    from
      tb a
    left join
      (select deptname,sum(smoney)/sum(teamrs) as rate2 from tb group by deptname) b
    on 
      a.deptname=b.deptname---结果---
    deptname teamname smoney      teamrs      rate    rate2       
    -------- -------- ----------- ----------- ------- ----------- 
    大哥       ss1      47368       11          .5742   2624
    大哥       ss2      15630       13          .1603   2624
    二弟       ss3      60000       NULL        NULL    NULL
    三弟       ss4      73458       8           1.2243  10374
    三弟       ss5      123290      8           2.0548  10374
    三弟       ss6      43180       5           1.1515  10374
    三弟       ss7      26080       5           .6955   10374
    三弟       ss8      130540      5           3.4811  10374
    三弟       ss9      97150       6           2.1589  10374
    三弟       ss10     49023       6           1.0894  10374
    三弟       ss11     3760        NULL        NULL    10374
    三弟       ss12     14500       6           .3222   10374
    三弟       ss13     9613        6           .2136   10374
    小师妹      ss14     19890       5           .5304   6654
    小师妹      ss15     19930       5           .5315   6654
    小师妹      ss16     60000       5           1.6000  6654(所影响的行数为 16 行)警告: 聚合或其它 SET 操作消除了空值。
      

  2.   

    楼主写一下rate2的计算公式?
      

  3.   

    rate2=sum(smoney)/sum(teamrs),根据deptname分组