如果我有一个组并且细节行总和,我怎么能得到平均值?
渲染时,由于分组
,我的表看起来像是跟随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 我只需要按正确的顺序引用不同的组
答案 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