powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL-запрос суммирование каждых трех месяцев
7 сообщений из 7, страница 1 из 1
SQL-запрос суммирование каждых трех месяцев
    #39538380
Добрый день, форумчане
Подскажите пожалуйста, есть таблица "Продажи" с полями "КодСотрудника", "ДатаПродажи", "Сумма". Мне необходимо на каждого сотрудника вывести сумму за каждые три месяца. Т.е. если месяц январь 2017, то сумма = ноябрь 2016 + декабрь 2016 + январь 2017, как правильно составить запрос чтобы суммирование было по каждому месяцу (данный суммирует последние два перед текущим и текущий месяц):
SELECT Продажи.КодСотрудника, MonthName(Month(DateAdd("m",12,(Date())))) AS Месяц, Year(Date()) AS Год, Sum(Продажи.Сумма) AS Сумма.
FROM Продажи
WHERE (((Продажи.ДатаПродажи) Between DateAdd("m",-2,Now()) And Now()))
GROUP BY Продажи.КодСотрудника, MonthName(Month(DateAdd("m",12,(Date())))), Year(Date())
ORDER BY Продажи.КодСотрудника;

Пытаюсь сделать через Dsum:
SELECT Продажи.КодСотрудника, Year([ДатаПродажи]) AS Год, MonthName(Month([ДатаПродажи])) AS Месяц, DSum("Сумма","Продажи","КодСотрудника=" & [КодСотрудника] And В ЭТОМ МЕСТЕ НЕ МОГУ ПРАВИЛЬНО НАПИСАТЬ УСЛОВИЕ ОТБОРА ОТНОСИТЕЛЬНО ДАТЫ ПРОДАЖИ ДатаПродажи Between DateAdd("m";-2;[ДатаПродажи]) And [ДатаПродажи]),) AS Сум
FROM Продажи
GROUP BY Продажи.КодСотрудника, Year([ДатаПродажи]), MonthName(Month([ДатаПродажи])), DSum("Сумма","Продажи","КодСотрудника=" & [КодСотрудника])
ORDER BY Продажи.КодСотрудника, Year([ДатаПродажи]);
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39538433
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖизньПрекрасна,

Если это не курсовая, то проще и универсальнее сделать на форме два поля даты "С" и "По", задавать в них
значения календариком или руками и использовать их в условии отбора этого и всех остальных периодических отчетов... если это курсовая, то флаг в руки - довольно интересная (хотя и бестолковая) задачка...
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39538459
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖизньПрекрасна, если правильно понял тебя
Код: sql
1.
2.
3.
4.
5.
PARAMETERS dtmDate DateTime = #1/19/2017#;
SELECT КодСотрудника, Sum(Сумма) AS СуммаЗаТриМесяца
FROM Продажи
WHERE ДатаПродажи Between DateSerial(Year(dtmDate),Month(dtmDate)+1,0) And DateSerial(Year(dtmDate),Month(dtmDate)-4,1)
GROUP BY КодСотрудника;
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39539179
Спасибо за ответы))) Но задача немножко другая. В базе есть форма с продажами и соответственно в ней есть всевозможные фильтры в т.ч. и выбор по диапазонам дат. Она дает возможность просмотреть результаты продаж сотрудников по разным периодам, но мне нужно выводить данные в отчет, например:
Сотрудник 1 сумма за январь (январь 2017 = ноябрь 2016 + декабрь 2016 + январь 2017)
Сотрудник 1 сумма за февраль (февраль 2017 = декабрь 2016 + январь 2017 + февраль 2017)
Сотрудник 1 сумма за март (март 2017 = январь 2017 + февраль 2017 + март 2017)

В данный момент я реализовала это с помощью VBA, но получилось как-то сложно( Создана отдельная таблица "Статистика продаж" в ней сохраняются продажи каждого сотрудника по месяцам. Написала функцию VBA (типо этого:)

Function QSum(s As Integer, y, k) As Currency

Select Case s
Case Is = 1
QSum = DLookup("Сумма", "СтатистикаПродаж", "[КодСотрудника]=" & k & " And [Год]=" & y - 1 & " And [Месяц]=" & 11 & "") + DLookup("Сумма", "СтатистикаПродаж", "[КодСотрудника]=" & k & " And [Год]=" & y - 1 & " And [Месяц]=" & 12 & "")
If QSum = False Then
QSum = DLookup("Сумма", "СтатистикаПродаж", "[КодСотрудника]=" & k & " And [Год]=" & y - 1 & " And [Месяц]=" & 11 & "")
QSum = DLookup("Сумма", "СтатистикаПродаж", "[КодСотрудника]=" & k & " And [Год]=" & y - 1 & " And [Месяц]=" & 12 & "")
End If
и т.д., и затем в отдельном запросе использую эту функцию. Но дело в том, что мне аналогично нужно считать еще и кол-во определенных товаров, а это опять похожие функции((( И работает это не очень шустро... Плюс суммы продаж могут изменяться, а это значит, что удобнее использовать динамический запрос, чем постоянно отслеживать у какого сотрудника и в каком месяце изменилась сумма и изменять эти данные в таблице "Статистка продаж".

Очень долго ищу возможность реализовать эту задачу наиболее удачным способом, может кто-нибудь сталкивался с чем-то аналогичным)))
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39539211
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖизньПрекраснанапример:
Сотрудник 1 сумма за январь (январь 2017 = ноябрь 2016 + декабрь 2016 + январь 2017)
Сотрудник 1 сумма за февраль (февраль 2017 = декабрь 2016 + январь 2017 + февраль 2017)
Сотрудник 1 сумма за март (март 2017 = январь 2017 + февраль 2017 + март 2017)
Используйте три копии запроса, подсчитывающего сумму за месяц:

Код: sql
1.
2.
3.
4.
SELECT q1.КодСотрудника,q1.date1 ГодМесяц, q1.Сумма+q2.Сумма+q3.Сумма AS Сумма
FROM (запрос) q1
LEFT JOIN (запрос) q2 ON q1.КодСотрудника = q2.КодСотрудника AND DATEDIFF('m',q1.date1,q2.date1) = 1
LEFT JOIN (запрос) q3 ON q1.КодСотрудника = q3.КодСотрудника AND DATEDIFF('m',q1.date1,q3.date1) = 2



Сам запрос соответственно типа
Код: sql
1.
2.
3.
SELECT КодСотрудника, DATESERIAL(YEAR(ДатаПродажи), MONTH(ДатаПродажи), 1) AS date1, SUM(Сумма) AS Сумма
FROM Продажи
GROUP BY КодСотрудника, DATESERIAL(YEAR(ДатаПродажи), MONTH(ДатаПродажи), 1) 



Не проверял, ибо не реализация,а только идея.
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39539509
Akina, спасибо, буду тестить))
...
Рейтинг: 0 / 0
SQL-запрос суммирование каждых трех месяцев
    #39539571
Akina, еще раз спасибо, запрос работает только чуть изменила:

SELECT q1.КодСотрудника, q1.date1, Nz([q1]![Сум],0)+Nz([q2]![Сум],0)+Nz([q3]![Сум],0) AS Выражение1
FROM (q1
LEFT JOIN q2 ON q1.КодСотрудника = q2.КодСотрудника AND DateDiff('m',q1.date1,q2.date1) = -1)
LEFT JOIN q3 ON q1.КодСотрудника = q3.КодСотрудника AND DateDiff('m',q1.date1,q3.date1) = -2;
т.к. считаться должно за предыдущие месяца)))

Но я не учла тот факт, что если у сотрудника не было продажи в каком-либо месяце, то и соответственно данных в этом месяце (с суммированием предыдущих) не будет(((. А так все круто, работает, может кому пригодится))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL-запрос суммирование каждых трех месяцев
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]