Sql server 如何在带有“隐藏重复项”的SSRS报告上使用SUM(聚合函数)?
我有一个SSRS网格报告,其标题行对所选子行求和 在SQL查询中,一个班次表内部连接到多个零件表,这意味着班次表上的小时字段在每个零件上重复。我使用小时数单元格上的隐藏重复SSRS功能来直观地修复此问题。问题是,尽管重复项被隐藏,但报表上的SUM函数(而不是查询)仍将它们包含在小时总数中 因此,我可能有下面的表和标题。小时数和班次的重复项是隐藏的,但仍然不希望包含在总和中Sql server 如何在带有“隐藏重复项”的SSRS报告上使用SUM(聚合函数)?,sql-server,reporting-services,sum,reportingservices-2005,Sql Server,Reporting Services,Sum,Reportingservices 2005,我有一个SSRS网格报告,其标题行对所选子行求和 在SQL查询中,一个班次表内部连接到多个零件表,这意味着班次表上的小时字段在每个零件上重复。我使用小时数单元格上的隐藏重复SSRS功能来直观地修复此问题。问题是,尽管重复项被隐藏,但报表上的SUM函数(而不是查询)仍将它们包含在小时总数中 因此,我可能有下面的表和标题。小时数和班次的重复项是隐藏的,但仍然不希望包含在总和中 SHIFT HOURS PART ON HAND ===== ======= ==== ====
SHIFT HOURS PART ON HAND
===== ======= ==== =======
SUM: 8 SUM: 90
===== ======= ==== =======
1st 3 X12Z 20
J23Z 10
2nd 1 Y36P 30
3rd 1 Q90F 30
我正在简化实际的报告,因此不能以不同的方式显示数据。而且,这些已经在一个组中,所以我不确定是否可以添加另一个组。如何让SUM函数返回所示小时数的总和
编辑:
我已经为我自己的问题发布了一个完整的答案,但是如果有更好的方法,或者我的答案可以改进,请随时提出您的评论。如果仍然有对我的方法有显著改进的答案,我将接受它们。使用存储过程。在开始将结果放入临时表X时继续。在结果上打开光标并遍历行。当您的标识列没有更改时,请将小时数设置为null。然后返回您的结果,您的报告应按原样工作。考虑到这种格式在报告中的普遍性,我希望有更多的答案,或者至少有更好的方法。但是,唉,我的方法如下: 与其在表中实现游标和循环,不如对存储过程中的原始结果运行此更新。它清除重复字段的值,即当前行的部分不是为此班次返回的第一行的部分的班次、小时数。如果原始查询中有order by,请将其包含在嵌套的select中: 基本上,公式是: 将1:m关系中的父表1中的字段置零。 使用子表的标识字段设置更新的位置。 使用父表的标识字段设置选择的位置。
通过一个移位表内部连接到多个零件表,我想你的意思是移位表内部连接1:m到零件表?@Peter,是的。有一个零件表,但我的意思是在移位和零件之间有一个1:m的关系。
update @tempResults
set shift = null, -- Shift is a duplicated field.
hours = null, -- Hours is a duplicated field.
where part <> -- The part number identifies the duplicates.
(
select top 1 part
from #tempresults t
where #tempresults.shift = t.shift -- Parts were grouped by shift.
-- order by the same fields from the original select statement.
)