使用求和列分组的值,现在我想要这些总和之间的平均值

时间:2014-05-19 16:16:11

标签: sql-server-2008 tsql ssrs-2008

如果我有一个组并且细节行总和,我怎么能得到平均值?

渲染时,由于分组

,我的表看起来像是跟随
Column C
23
34
25

然而,细节实际上就像这样

Column C
4
5
8
3
2
5
6
2

我希望分组值之间的平均值如下

23
34
25

...而不是细节,它会产生单个数字的平均值。

建议?

[编辑更新]

基础查询:

SELECT (u.Firstname + ' ' + u.LastName) AS UserName, SUM(fa.LogCount) AS Cnt, 
CONVERT(VARCHAR(10),DATEADD(DD, 2 - DATEPART(DW, fa.LogDate),fa.LogDate),101)  AS WeekOf 
FROM dbo.ActivityLog fa
JOIN dbo.[User] u ON fa.UserKey = u.UserId
GROUP BY (u.Firstname + ' ' + u.LastName),fa.LogDate

那么我会得到这样的结果。

UserName      Cnt           WeekOf            
Amy Smithers      5         03/31/2014
Amy Smithers      2         03/31/2014
Amy Smithers      8                       04/07/2014
Carla Tester      3         03/31/2014
Cassandra West    13            03/31/2014

现在,在报告中,我对UserName进行分组,然后对WeekOf进行分组,并对Cnt列进行求和。 例如,用户艾米史密瑟斯的行和她的总和(总和)为3/31的一周。但是,我也想要在3/31和4/07这两个星期组之间的平均Cnt,而不仅仅是整个时期的平均值,即Avg(5,2,8)。相反,我想要平均值(5 + 2,8)。希望这有帮助

[更新2] 如果你读到这里,这就是最终帮助我的 http://technet.microsoft.com/en-us/library/ms170438(SQL.105).aspx#Aggregates 我只需要按正确的顺序引用不同的组

1 个答案:

答案 0 :(得分:0)

这是你想要的吗?

SELECT Username, AVG(CONVERT(decimal, Cnt))
from
(
  SELECT (u.Firstname + ' ' + u.LastName) AS UserName, SUM(fa.LogCount) AS Cnt, 
  CONVERT(VARCHAR(10),DATEADD(DD, 2 - DATEPART(DW, fa.LogDate),fa.LogDate),101)  AS WeekOf 
  FROM dbo.ActivityLog fa
  JOIN dbo.[User] u ON fa.UserKey = u.UserId
  GROUP BY (u.Firstname + ' ' + u.LastName),fa.LogDate
) f
group by f.Username