Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Диапазон дат со сравнением результатов


Автор: Gal4onoK_89 15.9.2008, 11:49
Добрый день, есть проблемка, которую пока решить не смогла  smile , в базе перечислены отказы, которые регистрируются в базе данных по мере их появления, в отчете, должны выводится данные за определенный диапазон дат, например:в одном столбце с 01.09.2008 по 30.09.2008 г., а в соседнем для сравнения так же берутся отказы за этот же период, только 2007 г., 3-ий столбец  - рассчитывается разница между этими двумя столбцами. Должно выглядеть примерно так:


     Подразделение:       2008 г.           2007 г.        +- к 2007 г.    
                 1                        5                    7                      -2
                 2                        2                    4                      -2
                 3                        2                    0                     +2 

Вопрос, как правильно написать запрос, который выводил бы эти данные. Заранее спасибо. Очень жду.

Автор: bopoha 15.9.2008, 14:06
В конструкторе есть специальный тип запросов - перекресный. Мастер вам поможет.

Автор: Akina 15.9.2008, 14:16
Строишь первый запрос (скажем Q1) - выводящий сведения за первый период:
Код

Select Подразделение, Count(Отказы) As Отказы
From Таблица 
Where Дата Between DateSerial(2008, МесяцНачалаПериода, ДеньНачалаПериода) AND DateSerial(2008, МесяцКонцаПериода, ДеньКонцаПериода)
Group By Подразделение

Аналогично строишь второй запрос (Q2) за тот же период прошлого года.
Отдельно строишь запрос (Q3), выбирающий список подразделений
Код

Select Подразделение
From Таблица 

И наконец собираешь все это воедино, получая требуемое
Код

Select Q3.Подразделение,
       NZ(Q1.Отказы, 0) As ОтказыТекущегоПериода,
       NZ(Q2.Отказы, 0) As отказыПрошлогоПериода,
       NZ(Q1.Отказы, 0) - NZ(Q2.Отказы, 0) As Изменение
From (
          Q3
Left Join Q1
       On Q3.Подразделение = Q1.Подразделение)
Left Join Q2
       On Q3.Подразделение = Q2.Подразделение


PS. Не собирай это в один запрос - лучше не станет, а хуже стать может. Оставь 4 запроса. Если надо - промежуточные сделай скрытыми.

Автор: Gal4onoK_89 16.9.2008, 07:21
Доброе утро Akina, огромное Вам спасибо, всё получилось smile.

Добавлено через 33 секунды
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)