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

如何算出平均值并填原来的字段中
如何算出平均值并填原来的字段中?
例如:每一个部门分几个组,每个组有一个业绩分值。每个部门的业绩是这个部门所管辖组业绩的平均值。
数据保存于[业绩表]
部门ID 部门名 部门业绩 组ID 组名 组业绩
-----------------------
01 部门1 NULL 11 1部1组 6.5
01 部门1 NULL 12 1部2组 6.0
02 部门1 NULL 21 2部1组 7.8
02 部门1 NULL 22 2部2组 7.2
02 部门1 NULL 23 2部3组 5.9
03 部门1 NULL 31 3部1组 6.5
03 部门1 NULL 32 3部2组 7.5

那么我想统计每个部门的业绩(即所辖组的平均业绩):
select 部门ID, avg(组业绩) as 部门业绩
from [业绩表]
group by 部门

就可以了,但是这样的话,每个部门只有一条记录,即如下

部门ID 部门业绩
01 6.25  
02 6.97
03 7.00

要是我想把这三个平均值算出来之后,填到原来的[业绩表]中,该如何写这个SQL呢?要求结果如下:

部门ID 部门名 部门业绩 组ID 组名 组业绩
-----------------------
01 部门1 6.25 11 1部1组 6.5
01 部门1 6.25 12 1部2组 6.0
02 部门1 6.97 21 2部1组 7.8
02 部门1 6.97 22 2部2组 7.2
02 部门1 6.97 23 2部3组 5.9
03 部门1 7.00 31 3部1组 6.5
03 部门1 7.00 32 3部2组 7.5


就是在原来中,每条记录的[部门业绩]中填入平均值,有办法一条语句做成吗?

------解决方案--------------------
with result as
(
select 部门ID, avg(组业绩) as 部门业绩
from [业绩表]
group by 部门
)
update [业绩表]
set 组业绩 = (select 部门业绩 
from result 
where result.部门ID = [业绩表].部门ID)

------解决方案--------------------
SQL code


with result as
(
select 部门ID, 
       avg(组业绩) as 部门业绩
from [业绩表]
group by 部门
)
update [业绩表] 
set 组业绩 = 
(select 部门业绩  
from result  
where result.部门ID = [业绩表].部门ID)

------解决方案--------------------
SQL code
update a
set a.部门业绩=b.部门业绩
from 
  业绩表 a,
  (select 部门ID, avg(组业绩) as 部门业绩
   from [业绩表]
   group by 部门
   ) b
where a.部门ID=b.部门ID