Данные из двух запросов в один GroupHeader

отредактировано 09:00 Раздел: FastReport 3.0
Вопрос следующий:
Есть два SQL запроса которые дёргают одни и те же данные из таблиц, но из разных периодов дат, всё это передаётся в два разных frxDBDataSet из которых отчёт получает данные. Нужна группировка (GroupHeader) по типу ГСМ, но не из выбранного frxDBDataSet, а из двух сразу. Т. е.

frxDBDataSet frxDBDataSet1
Вид ГСМ Орг-я Реализация Выручка Реализация Выручка % соотн.
данныеи из frxDBDataSet данныеи из frxDBDataSet1
Как вот енто всё реализовать ?
Во замутил.

Комментарии

  • gpigpi
    отредактировано 09:00
    Сделайте выборку одним запросом так, чтобы отбирались данные сразу за два периода - подкорректируйте WHERE в запросе или сделайте объединение через UNION ALL
  • отредактировано 09:00
    Мне кажется, что какая канетель не проканет. Вот мой запрос:

    select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
    SUM(TotOsnov.Cur) Summa,
    ((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
    from Fuel, TotOsnov, Osnovan
    where
    TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
    and
    TotOsnov.Product=Fuel.Num
    and
    TotOsnov.Osnovanye=Osnovan.Num
    group by Marka, Name
    having SUM(TotOsnov.Cur)<>0
    union
    select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
    SUM(TotOsnov.Cur) Summa,
    ((SUM(TotOsnov.Lit)*0)-SUM(TotOsnov.Cur)) Delta
    from Fuel, TotOsnov, Osnovan
    where
    TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
    and
    TotOsnov.Product=Fuel.Num
    and
    TotOsnov.Osnovanye=Osnovan.Num
    group by Marka, Name
    having SUM(TotOsnov.Cur)=0
    и на сколько я понимаю имена полей можно задавать только агрегатным полям, хотяможет и ошибаюсь.
    И точно такой же запрос за другой период, но надо объединить их в отчёте в один. Т. е. мне надо получить % разницу за сравниваемые периоды.
  • gpigpi
    отредактировано 09:00
    сделайте запрос вида
    select field1 f1, field2 f2, 0 f3, 0 f4
    from table
    union all
    select 0 f1, 0 f2, field1 f3, field2 f4
    from table
    а результат можно вывести в DBCrossView
  • отредактировано 09:00
    Попробуйте сделать группировку по первому запросу, а второй подцепите в обработчике события OnBeforePrint мастердаты.
    В обработчике можно написать движение и подсчет по второму датасету.
    Элементарный пример:
    frxDBDataSet1.Next;
    
    При этом выводите в полях мастердвты нужные поля нужных датасетов.

    Если же запросы возвращают датасеты разной длины, то придется писать обработчик посложнее.
    Но, в принципе, возможно и не очень сложно.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.