powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вывести отчет за два периода сразу?
25 сообщений из 28, страница 1 из 2
Как вывести отчет за два периода сразу?
    #39117989
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые форумчане!
Помогите пожалуйста решить такое:
Есть одна таблица с кучей числовых полей. Есть запрос, который, запрашивая начальную и конечную дату, выдает суммы и средние значения этих полей. Мне нужно создать отчет, который бы выдавал эти результаты не только за текущий период, но одновременно и за тот же период прошлого года.
Т.е. если на примере, то период (зеленый) задает пользователь, как мне создать в отчете столбец "2014"?

P.S. Предполагаю, что здесь нужны In, DateAdd (с отрицательным значением), но вот как их применить?

Заранее спасибо за ответы!
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118044
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
revgenyv, 18410368
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118061
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\revgenyv, 18410368
простите пожалуйста мне мою тупость, но я что-то никак не пойму как это применить в моем случае...
Вот мой запрос:
Код: plsql
1.
2.
3.
SELECT Sum(Выезды.Выезд) AS [Sum-Выезд], Sum(Выезды.Выезд_по_тревоге) AS [Sum-Выезд_по_тревоге], Sum(Выезды.Выезд_ложный) AS [Sum-Выезд_ложный]
FROM Выезды
WHERE (((Выезды.Дата)>=[Начало] And (Выезды.Дата)<=[Конец]));


Исправьте пожалуйста, как должно быть, чтобы получить не три значения, а шесть (+прошлогодний период). Спасибо!
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118095
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел ответ на другом форуме (может кому пригодится):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT "Текущий" AS Период, Sum(Выезды.Выезд) AS [Sum-Выезд], Sum(Выезды.ВЫезд_по_тревоге) AS [Sum-ВЫезд_по_тревоге], Sum(Выезды.Выезд_ложный) AS [Sum-Выезд_ложный]
FROM Выезды
WHERE (((Выезды.Дата)>=[Начало] And (Выезды.Дата)<=[Конец]))
GROUP BY "Текущий"
UNION ALL 
SELECT "За предыдущий год" AS Период, Sum(Выезды.Выезд) AS [Sum-Выезд], Sum(Выезды.ВЫезд_по_тревоге) AS [Sum-ВЫезд_по_тревоге], Sum(Выезды.Выезд_ложный) AS [Sum-Выезд_ложный]
FROM Выезды
WHERE Выезды.Дата between dateserial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And  Dateserial(Year([Конец]) - 1, Month([Конец]), Day([Конец]))
GROUP BY "Текущий";
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118202
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
(Дата BETWEEN [Начало] And [Конец]) AS DCurr, 
(Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])) AS DPrev,
Sum(Выезд * DCurr) AS [Sum-Выезд_Curr], 
Sum(Выезд_по_тревоге * DCurr) AS [Sum-Выезд_по_тревоге_Curr], 
Sum(Выезд_ложный * DCurr ) AS [Sum-Выезд_ложный_Curr],
Sum(Выезд * DPrev) AS [Sum-Выезд_Prev], 
Sum(Выезд_по_тревоге * DPrev) AS [Sum-Выезд_по_тревоге_Prev], 
Sum(Выезд_ложный * DPrev ) AS [Sum-Выезд_ложный_Prev],
FROM Выезды;
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118211
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, что-то на синтаксис ругается...
вот пример базы
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118224
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revgenyv,

Сейчас базу посмотреть не могу, пишу с планшета.
Может, где чего упустила, попробую найти.
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118227
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, спасибо огромное! буду ждать.

Вот что пишет:
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118234
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, Ваш вариант мне был бы удобнее! но я, к сожалению, только начинающий, не могу понять где ошибка... жду и надеюсь на Вас!
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118258
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revgenyv,
Кажется, двух скобок не хватало
Код: sql
1.
 (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец]))) AS DPrev


З
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118263
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, одной не хватало, должно быть там три закрывающих перед AS DPrev.
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118268
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, теперь вот что:
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118321
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, нашла.
Теперь запятая лишняя вкралась
Код: sql
1.
 Sum(Выезд_ложный * DPrev ) AS [Sum-Выезд_ложный_Prev], FROM Выезды

Ох)))
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118338
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, нет 8(

что-то непруха какая-то сегодня....
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118358
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но, наверное, придется так, везде указывать явно интервалы,
иначе работать не будет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
Sum(Выезд * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_Curr], 
Sum(Выезд_по_тревоге * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_по_тревоге_Curr], 
Sum(Выезд_ложный * (Дата BETWEEN [Начало] And [Конец])[CSV][/CSV]) AS [Sum-Выезд_ложный_Curr], 
Sum(Выезд * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_Prev],
Sum(Выезд_по_тревоге * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_по_тревоге_Prev], 
Sum(Выезд_ложный * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_ложный_Prev] 
FROM Выезды;

Надеюсь, тут все знаки на месте.)))
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118360
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revgenyv,

Ну так, собственно, и предположила.
Поэтому и даю новую редакцию.
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118361
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, во! работает!
только значения почему-то отрицательные все...
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118363
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не торопитесь.
Сейчас все же проверю скобки.
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118367
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118381
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со скобками, вроде, все нормально.
Но вклеилась какая-то ерунда. Помечаю красным. Уберите у себя, пожалуйста.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
Sum(Выезд * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_Curr], 
Sum(Выезд_по_тревоге * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_по_тревоге_Curr], 
Sum(Выезд_ложный * (Дата BETWEEN [Начало] And [Конец])[CSV][/CSV]) AS [Sum-Выезд_ложный_Curr], 
Sum(Выезд * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_Prev], 
Sum(Выезд_по_тревоге * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_по_тревоге_Prev], 
Sum(Выезд_ложный * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_ложный_Prev] 
FROM Выезды;

Уж простите "планшетные" ляпы.)))
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118384
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle, это уже исправил. отрицательные значения - не проблема, просто привел их к абсолютной величине
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
Sum(ABS(Выезд * (Дата BETWEEN [Начало] And [Конец]))) AS [Sum-Выезд_Curr],
Sum(ABS(Выезд_по_тревоге * (Дата BETWEEN [Начало] And [Конец]))) AS [Sum-Выезд_по_тревоге_Curr],
Sum(ABS(Выезд_ложный * (Дата BETWEEN [Начало] And [Конец]))) AS [Sum-Выезд_ложный_Curr],
Sum(ABS(Выезд * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец]))))) AS [Sum-Выезд_Prev],
Sum(ABS(Выезд_по_тревоге * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец]))))) AS [Sum-Выезд_по_тревоге_Prev],
Sum(ABS(Выезд_ложный * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец]))))) AS [Sum-Выезд_ложный_Prev]
FROM Выезды;


Спасибо Вам огромное!
Дайте-ка я вас подхвачу на руки и расцелую в обе щёчки!
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118389
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revgenyv,

Ах, да. Вы же не знаете.
Это суммы "минус единиц" (-1), поэтому либо в запросе сделать -SUM,
либо затем в обработке и выводе учитывать это обстоятельство.
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118393
revgenyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
Все работает! Чтобы я без Вас делал? СПАСИБО!

Окончательный вариант
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
-Sum(Выезд * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_Curr],
-Sum(Выезд_по_тревоге * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_по_тревоге_Curr],
-Sum(Выезд_ложный * (Дата BETWEEN [Начало] And [Конец])) AS [Sum-Выезд_ложный_Curr],
-Sum(Выезд * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_Prev],
-Sum(Выезд_по_тревоге * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_по_тревоге_Prev],
-Sum(Выезд_ложный * (Дата BETWEEN DateSerial(Year([Начало]) - 1, Month([Начало]), Day([Начало])) And DateSerial(Year([Конец]) - 1, Month([Конец]), Day([Конец])))) AS [Sum-Выезд_ложный_Prev]
FROM Выезды;

...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118394
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revgenyv,

Не надо абсолютные значения. Просто везде -Sum.
А-а-а...
Только не уроните!
...
Рейтинг: 0 / 0
Как вывести отчет за два периода сразу?
    #39118761
revgenyv, вариант, дающий результат, как на картинке первого поста
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
PARAMETERS Начало DateTime, Конец DateTime;
TRANSFORM Sum(v) AS sv
SELECT kv AS Показатель
FROM (SELECT Дата, 'Кол-во выездов' As kv, Выезд AS v FROM Выезды
UNION ALL
SELECT Дата, 'По тревоге', ВЫезд_по_тревоге FROM Выезды
UNION ALL
SELECT Дата, 'Ложные',  Выезд_ложный FROM Выезды) AS Z
WHERE (Дата Between Начало And Конец) Or 
      (Дата Between DateAdd('yyyy', -1, Начало) And DateAdd('yyyy', -1, Конец))
GROUP BY kv
PIVOT Year(Дата)
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вывести отчет за два периода сразу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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