日期:2014-05-17  浏览次数:20541 次

如何根据Id和年更新合计行的b和c的值
数据样例

Id    年       a     b    c
1    2011    合计
1    2011     X1   17    25
1    2011     X2   18    22
1    2011     X3   19    23
2    2012    合计 
2    2012     X1   11    27
2    2012     X2   12    21
2    2012     X3   13    20
3    2013    合计
3    2013     X1   14    20 
3    2013     X2   15    34
3    2013     X3   16    22

数据结果

Id    年       a     b    c
1    2011    合计   54    70
1    2011     X1   17    25
1    2011     X2   18    22
1    2011     X3   19    23
2    2012    合计   36    68   
2    2012     X1   11    27
2    2012     X2   12    21
2    2012     X3   13    20
3    2013    合计   45    76
3    2013     X1   14    20 
3    2013     X2   15    34
3    2013     X3   16    22


------最佳解决方案--------------------
;with test as (
select Id,    年   ,    a   , sum(b) b   , sum(c )c
from 数据样例
where a<>'合计'
group by Id,    年   ,    a   )
update a
set a.b=b.b ,a.c=b.c
from 数据样例 a inner join test b on a.id=b.id and a.年=b.年
where a.a='合计'