Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在带有“隐藏重复项”的SSRS报告上使用SUM(聚合函数)?_Sql Server_Reporting Services_Sum_Reportingservices 2005 - Fatal编程技术网

Sql server 如何在带有“隐藏重复项”的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 ===== ======= ==== ====

我有一个SSRS网格报告,其标题行对所选子行求和

在SQL查询中,一个班次表内部连接到多个零件表,这意味着班次表上的小时字段在每个零件上重复。我使用小时数单元格上的隐藏重复SSRS功能来直观地修复此问题。问题是,尽管重复项被隐藏,但报表上的SUM函数(而不是查询)仍将它们包含在小时总数中

因此,我可能有下面的表和标题。小时数和班次的重复项是隐藏的,但仍然不希望包含在总和中

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.
       )