Запрос с нарастающим итогом в access

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Mypppka
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 28.07.2006 (Пт) 2:10

Запрос с нарастающим итогом в access

Сообщение Mypppka » 23.05.2009 (Сб) 23:20

Доброго времени суток всем.
Помогите, пожалуйста, решить такую проблему:
Есть таблица (наименование сырья, дата, расход сырья)
В столбце "Расход сырья" содержится информация о количестве сырья, расходуемого в определенную дату.
Нужно сделать запрос (наименование сырья, дата, расход сырья нарастающим итогом (включая период от текущей даты до той, для которой расчитывается количество сырья)
не понимаю, как можно в запросе совместить условия:
1. Суммировалось количество сырья в отдельности каждого вида.
2. Суммировалось только то, что будет израсходовано начиная с текущей даты и до даты в будущем, на которую намечен план производства.
Вот мои старания:
Код: Выделить всё
SELECT НаДеньТреб.[IDS], НаДеньТреб.[DatPr], DSum([План],"НаДеньТреб", [DatPr]>=date() ) As ПланНар
FROM НаДеньТреб
WHERE (((НаДеньТреб.[IDS]) In (SELECT [IDS] FROM [НаДеньТреб] As Tmp GROUP BY [IDS] HAVING Count(*)>0 ) and НаДеньТреб.[DatPr]>= date() ))
ORDER BY НаДеньТреб.[IDS];

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Запрос с нарастающим итогом в access

Сообщение karlex » 24.05.2009 (Вс) 0:08

Нужно объединить результаты выполнения двух разных запросов?
Если да, то это делается командой UNION:
Код: Выделить всё
SELECT...
UNION
SELECT...

PS: объединяемые результаты должны иметь одинаковое: кол-во полей, типы данных полей и последовательность полей.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Запрос с нарастающим итогом в access

Сообщение alibek » 24.05.2009 (Вс) 9:51

Чтобы упростить и ускорить получение нарастающих итогов, обычно добавляют вспомогательные столбцы, где хранят текущие значения итогов на начало периода.
Lasciate ogni speranza, voi ch'entrate.

Mypppka
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 28.07.2006 (Пт) 2:10

Re: Запрос с нарастающим итогом в access

Сообщение Mypppka » 24.05.2009 (Вс) 13:32

karlex, Нет мне нужно не объединить данные из 2х таблиц..а именно расчитать сумму нарастающим итогом.

Таблица такая:
Сырье | Дата | Количество
Молоко |12.04.2009 |5
Молоко |24.05.2009 |5
Молоко |26.05.2009 |5
Мука |12.04.2009 |10
Мука |24.05.2009 |10
Мука |26.05.2009 |10
Сахар |12.04.2009 |5
Сахар |24.05.2009 |5
Сахар |26.05.2009 |5

Должно получиться так
Сырье | Дата | Количество
Молоко |12.04.2009 |5 ----не суммируем, т.к. прошлый период
Молоко |24.05.2009 |5 ---- не суммируем, т.к. текущая дата
Молоко |26.05.2009 |10 ----суммируем с количеством за предыдущую дату (от настоящего до 26.05.2009)
Мука |12.04.2009 |10 ----не суммируем, т.к. прошлый период
Мука |24.05.2009 |10 ---- не суммируем, т.к. текущая дата
Мука |26.05.2009 |20 ----суммируем с количеством за предыдущую дату (от настоящего до 26.05.2009)
Сахар |12.04.2009 |5 ----не суммируем, т.к. прошлый период
Сахар |24.05.2009 |5 ---- не суммируем, т.к. текущая дата
Сахар |26.05.2009 |10 ----суммируем с количеством за предыдущую дату (от настоящего до 26.05.2009)


и мне не понятно..какой здесь столбец с промежуточными значениями делать?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Запрос с нарастающим итогом в access

Сообщение HandKot » 24.05.2009 (Вс) 22:56

если я правильно понял, то примерно так

Код: Выделить всё
SELECT
  T1.[IDS],
  T1.[DatPr],
  SUM(IIF(T2.Data >= date(), T2.Amount,IIF(T1.[DatPr]=T2.[DatPr], T1.[DatPr], 0)))
FROM
  НаДеньТреб AS T1
LEFT JOIN НаДеньТреб AS T2 ON (T2.[DatPr] <= T1.[DatPr]) AND (T1.[IDS]=T2.[IDS])
GROUP BY
  T1.[IDS], T1.[DatPr]
ORDER BY
  T1.[IDS], T1.[DatPr];
надо только проверить на реальных данных

ЗЫЖ если бы правильно работал between было бы всё намного проще
I Have Nine Lives You Have One Only
THINK!

Mypppka
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 28.07.2006 (Пт) 2:10

Re: Запрос с нарастающим итогом в access

Сообщение Mypppka » 25.05.2009 (Пн) 14:24

Ура, Товарисчи!!
До меня дошло!
Код: Выделить всё
SELECT T1.IDS, T1.DatPr, Sum(IIf(T2.DatPr>=Date() and T1.DatPr>=T2.DatPr,T2.[План],0)) AS Выражение1
FROM НаДеньТреб AS T1 LEFT JOIN НаДеньТреб AS T2 ON T1.[IDS] = T2.[IDS]
GROUP BY T1.IDS, T1.DatPr
ORDER BY T1.IDS, T1.DatPr;


Вот это работает!!

HandKot, спасибо Вам огромное!!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Запрос с нарастающим итогом в access

Сообщение HandKot » 25.05.2009 (Пн) 18:08

вроде так будет тоже работать
Код: Выделить всё
SELECT
  T1.IDS,
  T1.DatPr,
  T1.[План] + Sum(IIf(T2.DatPr>=Date() ,T2.[План],0)) AS Выражение1
FROM НаДеньТреб AS T1
LEFT JOIN НаДеньТреб AS T2 ON T1.[IDS] = T2.[IDS] AND T2DatPr < T1.DatPr
GROUP BY T1.IDS, T1.DatPr, T1.[План]
ORDER BY T1.IDS, T1.DatPr;
I Have Nine Lives You Have One Only
THINK!

Mypppka
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 28.07.2006 (Пт) 2:10

Re: Запрос с нарастающим итогом в access

Сообщение Mypppka » 27.05.2009 (Ср) 2:23

О, тоже хорошая идея. Спасибо. Теперь есть из чего выбирать.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 121

    TopList