Сумма MS Access по группам, но не по деталям

Я пытаюсь рассчитать SUM в отчете MS Access следующим образом:

  • Заголовок Group1 — метка

    • Group2header - value
      • Detail - example
      • Деталь - пример
    • Group2header - value
      • Detail - example
  • Group1footer [сумма значений Group2header]

Каким-то образом, когда появляются дополнительные строки с подробностями, сумма в group1footer рассчитывается неправильно (добавляет значение для каждой детали).

Я не могу вычислить суммы в запросе, потому что «значение» уже вычислено в запросе (подзапрос будет возвращаться ко многим строкам):

(
    (
        (sl_ticketdetail.weight,0) * sl_ticketdetail.amount 
        - (
            SELECT SUM(sl_invoicedetail.amount)
            FROM sl_invoicedetail 
            WHERE ticketdetailid = sl_ticketdetail.ticketdetailid
        )
        / 1000
    )
    * sl_ticketdetail.cost
)
/ 1000

Любая идея о том, что может пойти не так?


person Jorrit Reedijk    schedule 19.03.2009    source источник


Ответы (3)


Поскольку у вас уже есть предварительно рассчитанные в запросе суммы по Группе 2, они будут повторяться для каждой строки результатов и, следовательно, не могут использоваться (как вы выяснили) для расчета итогов по Группе 1.

У вас есть два решения

1) предварительно рассчитайте итоги группы 1 в своем запросе и просто сообщите о них, как вы делаете итоги группы 2

2) используйте код в событиях формата/печати нижнего колонтитула Group2, чтобы зафиксировать значение и вручную увеличить текущую сумму Group1

Я бы сказал, 1) самый простой - 2) немного сложный и иногда приводит к неточным результатам, если пользователи перелистывают страницы назад и вперед.

person DJ.    schedule 20.03.2009

Вы говорите, что получаете такие результаты:

Group 1a
    Group 2a
        Foo1         1
        Foo2         1
        foo3         2
    Group 2a Sum   4
    Group 2b
        Foo1         3
        Foo2         3
    Group 2a Sum   6
Group 1a Sum    10
Group 1b
    Group 2a
        Foo1         4
        Foo2         1
        foo3         2
    Group 2a Sum   7
    Group 2b
        Foo1         4
        Foo2         3
    Group 2a Sum   14
Group 1b Sum    21

Это поведение, которого я ожидал. Я смог сделать это, поместив =Sum([value]) в несвязанное поле в нижнем колонтитуле каждой группы (и даже в нижнем колонтитуле отчета).

Я знаю, что «работает для меня» не очень полезно.

Вы пометили поля значений деталей (или поля сводки) тем же именем, что и источник данных? Иногда MS Access ведет себя странно, если ваши поля имеют то же имя, что и их связанный источник данных (я склонен слегка их переименовывать, поэтому я уверен, что я имею в виду в коде).

person BIBD    schedule 20.03.2009

Вам потребуется источник записей основного отчета, чтобы включить итоги для группы 2. Затем вам потребуется дополнительный отчет с другим источником записей, который находится на уровне детализации.

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

person JeffO    schedule 19.05.2009