SQL Server计算列Running total实现:解决PARTITION BY统计重复值适配SSRS2005问题
解决方法
你之前用SUM() OVER(PARTITION BY...)得到的结果不对,是因为这个计算会把同个项目下所有重复行的WeightedBilled都累加,没有先去重取每个项目的最大值。以下两种方案都可以实现你要的员工层级求和效果:
1. SQL侧预处理
先做两层聚合,先按员工+项目维度取每个项目的WeightedBilled最大值,再按员工维度汇总求和,再关联回原数据集即可:
-- 第一层:按员工+项目分组,取每个项目的WeightedBilled最大值 WITH ProjAgg AS ( SELECT rpt_tEmployeeName, CheckProjID, MAX(WeightedBilled) AS SingleProjBilled FROM 你的原始查询表/结果集 GROUP BY rpt_tEmployeeName, CheckProjID ), -- 第二层:按员工分组,汇总所有项目的最大值得到员工级总和 EmpAgg AS ( SELECT rpt_tEmployeeName, SUM(SingleProjBilled) AS EmpTotalBilled FROM ProjAgg GROUP BY rpt_tEmployeeName ) -- 关联回原始数据,把员工级总和带入最终数据集 SELECT t.*, e.EmpTotalBilled FROM 你的原始查询表/结果集 t INNER JOIN EmpAgg e ON t.rpt_tEmployeeName = e.rpt_tEmployeeName
2. SSRS 2005报表端直接配置(无需改SQL)
直接在员工组的深色背景合计单元格输入以下表达式即可:
=Sum(Max(Fields!WeightedBilled.Value, "你的项目分组名"))
把表达式里的你的项目分组名替换成你报表里项目层级分组的实际名称即可,该表达式会先对每个项目分组取WeightedBilled的最大值,再把所有项目的最大值累加,完全匹配你预期的$2000求和结果。
内容的提问来源于stack exchange,提问作者ipuks
相关产品推荐
相关产品推荐

