2011-10-24 56 views
4

这有点难以用文字解释......我试图计算矩阵中分组不同值的总和。比方说,我有一个SQL查询返回的以下数据:分组的不同值的总和

------------------------------------------------ 
| Group | ParentID | ChildID | ParentProdCount | 
|  A |  1 |  1 |    2 | 
|  A |  1 |  2 |    2 | 
|  A |  1 |  3 |    2 | 
|  A |  1 |  4 |    2 | 
|  A |  2 |  5 |    3 | 
|  A |  2 |  6 |    3 | 
|  A |  2 |  7 |    3 | 
|  A |  2 |  8 |    3 | 
|  B |  3 |  9 |    1 | 
|  B |  3 |  10 |    1 | 
|  B |  3 |  11 |    1 | 
------------------------------------------------ 

有查询其他一些数据,但它是不相关的。 ParentProdCount是特定于ParentID的。

现在,我有一个MS报表设计器中的矩阵,我试图计算ParentProdCount的总和(按“组”分组)。如果我只是添加表达式

=Sum(Fields!ParentProdCount.Value) 

我得到结果20组A和组3,这是不正确的。 A组和B组的正确值应为5,如果没有涉及到ChildID,则不会发生这种情况,但我必须在同一个矩阵中使用一些其他特定于儿童的数据。

我试图嵌套FIRST()和SUM()聚合函数,但显然它不可能有嵌套的聚合函数,即使他们有定义的范围。

我很确定有一些方法可以计算分组独立总和,而无需创建另一个SQL查询。任何人都知道如何做到这一点?

回答

8

好,我得到这个整理出来加入了ROW_NUMBER()函数,我的SQL查询:

SELECT Group, ParentID, ROW_NUMBER() OVER (PARTITION BY ParentID ORDER BY ChildID ASC) AS Position, ChildID, ParentProdCount FROM Table 

,然后我用

=SUM(IIF(Position = 1, ParentProdCount.Value, 0)) 
+1

对于任何有此问题的人,我试着总结一个十进制值并得到这个错误:“First,Last,Previous,Count和CountDistinct以外的聚合函数只能聚合单个数据类型的数据。我通过在Sum函数中将Nothing替换为Nothing来解决问题。 – Rono

0

将分组在PARENTID取代SSRS SUM函数并使用求和该组,

例如:

if group over ParentID = "ParentIDGroup" 
then 
    column sum of ParentPrdCount = SUM(Fields!ParentProdCount.Value,"ParentIDGroup")