Сумма сгруппированных отдельных значений - PullRequest
4 голосов
/ 24 октября 2011

Это немного сложно объяснить словами ... Я пытаюсь вычислить сумму сгруппированных различных значений в матрице. Допустим, у меня есть следующие данные, возвращаемые 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 Report Designer, в которой я пытаюсь вычислить сумму для ParentProdCount (сгруппированную по «Группе»). Если я просто добавлю выражение

=Sum(Fields!ParentProdCount.Value)

Я получаю результат 20 для группы A и 3 для группы B, что неверно. Правильные значения должны быть 5 для группы A и 1 для группы B. Этого не произошло бы, если бы не был задействован ChildID, но я должен использовать некоторые другие данные, специфичные для ребенка, в той же матрице.

Я пытался вложить агрегатные функции FIRST () и SUM (), но, очевидно, невозможно иметь вложенные агрегирующие функции, даже когда у них определены области действия.

Я почти уверен, что есть какой-то способ вычислить сгруппированную отдельную сумму без необходимости создания другого SQL-запроса. У кого-нибудь есть идеи, как это сделать?

Ответы [ 2 ]

9 голосов
/ 31 октября 2011

Хорошо, я разобрался с этим, добавив функцию ROW_NUMBER () в мой SQL-запрос:

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

, а затем заменил функцию SSRS SUM на

=SUM(IIF(Position = 1, ParentProdCount.Value, 0))
0 голосов
/ 18 ноября 2015

Поместите группировку по ParentID и используйте суммирование по этой группе,

например:

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