|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
Добрый день, форумчане Подскажите пожалуйста, есть таблица "Продажи" с полями "КодСотрудника", "ДатаПродажи", "Сумма". Мне необходимо на каждого сотрудника вывести сумму за каждые три месяца. Т.е. если месяц январь 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([ДатаПродажи]); ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2017, 19:14 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
ЖизньПрекрасна, Если это не курсовая, то проще и универсальнее сделать на форме два поля даты "С" и "По", задавать в них значения календариком или руками и использовать их в условии отбора этого и всех остальных периодических отчетов... если это курсовая, то флаг в руки - довольно интересная (хотя и бестолковая) задачка... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2017, 23:45 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
ЖизньПрекрасна, если правильно понял тебя Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2017, 05:39 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
Спасибо за ответы))) Но задача немножко другая. В базе есть форма с продажами и соответственно в ней есть всевозможные фильтры в т.ч. и выбор по диапазонам дат. Она дает возможность просмотреть результаты продаж сотрудников по разным периодам, но мне нужно выводить данные в отчет, например: Сотрудник 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 и т.д., и затем в отдельном запросе использую эту функцию. Но дело в том, что мне аналогично нужно считать еще и кол-во определенных товаров, а это опять похожие функции((( И работает это не очень шустро... Плюс суммы продаж могут изменяться, а это значит, что удобнее использовать динамический запрос, чем постоянно отслеживать у какого сотрудника и в каком месяце изменилась сумма и изменять эти данные в таблице "Статистка продаж". Очень долго ищу возможность реализовать эту задачу наиболее удачным способом, может кто-нибудь сталкивался с чем-то аналогичным))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2017, 20:57 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
ЖизньПрекраснанапример: Сотрудник 1 сумма за январь (январь 2017 = ноябрь 2016 + декабрь 2016 + январь 2017) Сотрудник 1 сумма за февраль (февраль 2017 = декабрь 2016 + январь 2017 + февраль 2017) Сотрудник 1 сумма за март (март 2017 = январь 2017 + февраль 2017 + март 2017) Используйте три копии запроса, подсчитывающего сумму за месяц: Код: sql 1. 2. 3. 4.
Сам запрос соответственно типа Код: sql 1. 2. 3.
Не проверял, ибо не реализация,а только идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2017, 21:44 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
Akina, спасибо, буду тестить)) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2017, 13:14 |
|
SQL-запрос суммирование каждых трех месяцев
|
|||
---|---|---|---|
#18+
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; т.к. считаться должно за предыдущие месяца))) Но я не учла тот факт, что если у сотрудника не было продажи в каком-либо месяце, то и соответственно данных в этом месяце (с суммированием предыдущих) не будет(((. А так все круто, работает, может кому пригодится)) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2017, 14:37 |
|
|
start [/forum/topic.php?fid=45&msg=39539211&tid=1611992]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 407ms |
0 / 0 |