Wierd SUM导致嵌套的Row Group

时间:2018-01-10 15:24:37

标签: sql-server reporting-services

我有三个嵌套的ROW组: -

对于每种情况,第一个依赖于数据集中的字段是真还是假。这是错误最差的地方。第二个嵌套在第一个上,基于案例中的组变量(1到多个),第三个是案例的引用号。

总和不适用于由连接产生的cloumn,具体取决于第二组的ID。它似乎拉出正确的值,但乘以案例的数量。我可以在这里将最后一个嵌套组(ref#)中的案例数除以得到正确的值。尝试使用“计数”,空白,添加总计...

如果我尝试将列与“= Sum(ReportItems!Textbox231.Value)”相加,则产生: -

textrun的值表达式'Textbox232.Paragraphs [0] .TextRuns [0]'在报表项上使用聚合函数。聚合函数只能用于页眉和页脚中包含的报表项。

对于所有三个嵌套行组中的非连接值,总和都可以正常工作。但是对于连接的值,它们是一个数量级的。这是为什么?

SUM not working for 3rd column

SUM产生有线结果

SELECT  DISTINCT

1 个答案:

答案 0 :(得分:1)

这是发生此类问题的常见原因。

SUM错误的可能原因是您的选择中的DISTINCT隐藏了基础查询中的重复项。由于SUM在distinct之前执行,因此它将在DISTINCT过滤掉之后看不到的结果汇总。

而不是DISTINCT使用GROUP BY查询,那么您可以创建一个没有重复项的基本查询(您不必使用DISTINCT隐藏)或者如果您无法删除重复项,通过执行MIN,MAX或AVG在显示列之前聚合列。

我很乐意提供更多帮助,但您的问题中没有足够的信息可以在我的计算机上重现问题。

SUM可以返回意外结果还有其他原因:通常是隐式转换(SQL服务器决定意外的数据类型并对数字进行舍入),在某些情况下是在WHERE条件之前或之后执行的CASE子句。但这些似乎不是问题所在。

示例

DECLARE @T TABLE (ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, NumVal INT) 
DECLARE @i INT 
SET @i = 1
WHILE @i < 1000 
BEGIN 
    INSERT INTO @T (NumVal) VALUES (@i) 
    IF RIGHT (CAST (@i AS VARCHAR(12)),1) = 7 
    BEGIN INSERT INTO @T (NumVal) VALUES (@i) END 
    SET @i = @i +1 
END 
SELECT DISTINCT NumVal, SUM (NumVal) FROM @T GROUP BY NumVal 

在上面的示例中,我在表格中插入了999个不同的条目,但重复了任何以7结尾的数字。选择不同给人的印象是只有999个条目,而总和则添加以7结尾的数字。你的情况可能更复杂,但我想在这里展示的是底层的副本在DISTINCT中变得不可见,并以SUM重新出现:

NumVal  Sum
1   1
2   2
3   3
4   4
5   5
6   6
7   14
8   8
9   9
10  10
11  11
12  12
13  13
14  14
15  15
16  16
17  34
18  18
19  19
20  20
21  21
22  22
23  23
24  24
25  25
26  26