在 SQL Server 中的计算列上运行总计

Posted

技术标签:

【中文标题】在 SQL Server 中的计算列上运行总计【英文标题】:Running total on calculated column in SQL Server 【发布时间】:2021-12-20 08:09:05 【问题描述】:

我正在使用 SQL 代码获取重复的列的运行总计,在下面的屏幕截图中,计算了列 WeightedBilled,我在组级别的报告中使用它作为 MAX(WeightedColumn)

现在我想添加一列,添加 WeightedBilled 的值,然后只选取该列的一个值。

当我使用 over partition by 子句时,它会添加所有重复值。

我的代码是:

SUM( WeightedBilled) OVER (PARTITION BY(CheckProjID), rpt_tEmployeeName) AS EmpLevelWeightedBill`,

在 s-s-rS 2005 报告方面:深色背景是我想要的值总和。

Employee     $2000 (this is what I need here)

Project 1     $500 (displayed as max(weightedBilled))
Project 2     $600 (displayed as max(weightedBilled))
Project 3     $700 (displayed as max(weightedBilled))
Project 4     $200 (displayed as max(weightedBilled))

[报表布局]

【问题讨论】:

如果您想获得兴趣和答案,最好不要发布images的数据,我们不能从图像中剪切和粘贴,示例数据应该是消耗性文本在您的问题中,最好是 createinsert 语句,或者DB<>Fiddle 链接。一个好的 SQL 问题会有一个Minimal, Reproducible Example “在 s-s-rS 2005 报告方” s-s-rS 2005?这意味着您也在使用 SQL Server 2005。如果您想要运行总计,则必须使用三角形 JOIN。更好的解决方案是使用受支持的 SQL Server 版本,而不是使用大约 8 年没有任何支持的版本。 所有支持的 SQL Server 版本都支持累积聚合。 【参考方案1】:

你的问题不是很清楚,但假设你想将一个字段的最大值相加,并且假设你有一个名为 EmployeeRowGroup 的员工行组,那么表达式将如下所示。

=SUM(MAX(Fields!WeightedBilled.Value, "EmployeeRowGroup"))

行组区分大小写,必须用双引号括起来。

【讨论】:

以上是关于在 SQL Server 中的计算列上运行总计的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012 Windowing 函数计算运行总计

SQL Server 2008 累计运行总计

为啥 SQL Server 不使用计算列上的索引?

按SQL Server中的总计百分比分组

在 MS SQL Server 2008 的 Pivot 中计算水平总计

如何获得子总数和总计基于Sql Server中的标题和子标题