Объединение нескольких выборок (MS Access 97)
Модератор: Naeel Maqsudov
Есть таблица "продажи", где есть три столбца - наименование, дата и количество продаж
Из этого я формирую три запроса - продажи за последнюю неделю, последний месяц и последний год. Как это потом свести в одну таблицу формата
наименование:продажи за последнюю неделю:последний месяц:последний год
?
Спасибо
Из этого я формирую три запроса - продажи за последнюю неделю, последний месяц и последний год. Как это потом свести в одну таблицу формата
наименование:продажи за последнюю неделю:последний месяц:последний год
?
Спасибо
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Зачем объединять! Создайте не три, а один запрос, возвращающий результат в нужном формате.
Код: Выделить всё
select
наименоване,
(select sum([количество продаж])
from where наименование=П1.наименование and дата>Now()-7
) as за_неделю,
(select sum([количество продаж])
from where наименование=П1.наименование and дата>Now()-30
) as за_месяц,
(select sum([количество продаж])
from where наименование=П1.наименование and дата>Now()-365
) as за_год,
from продажи as П1
Не работает,
Ошибочное или пропущенное зарезервированное слово или аргумент в инструкции SELECT или неверная пунктуация.
В чем может быть проблема?
Естественно вторая строчка "наименованИе", но не работает
Менял все имена на латиницу - таблица PRODAGA, дата=DATA_DOC, количество продаж = KOL, наименование=NAIM2
Не получается
Ошибочное или пропущенное зарезервированное слово или аргумент в инструкции SELECT или неверная пунктуация.
В чем может быть проблема?
Естественно вторая строчка "наименованИе", но не работает
Менял все имена на латиницу - таблица PRODAGA, дата=DATA_DOC, количество продаж = KOL, наименование=NAIM2
Не получается
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Прошу прощения, во всех вложенных запросах я пропустил название таблицы:
есть ...from where...
а надо ...from продажи where...
Еще попробуйте в конструкторе запросов этот запрос открывать. Там должны получиться просто вычисляемые поля.
Например: "За_неделю
select....)"
есть ...from where...
а надо ...from продажи where...
Еще попробуйте в конструкторе запросов этот запрос открывать. Там должны получиться просто вычисляемые поля.
Например: "За_неделю

Увы... м.б.версия Access? или мои кривые руки.... ну не работает...
в конструкторе не открывается - пишет ту же ошибку
Можно по шагам расписать?
Я создаю запрос/конструктор, переключаюсь в SQL вид, забиваю код... после этого запускаю... Что не так?
в конструкторе не открывается - пишет ту же ошибку
Можно по шагам расписать?
Я создаю запрос/конструктор, переключаюсь в SQL вид, забиваю код... после этого запускаю... Что не так?
ОК, я решил экспортировать все в Excel, потом объединить все через СУММЕСЛИ
В связи с этим вопрос - можно ли экспортировать в конкретный лист книги и, если он уже есть, заменять его?
В связи с этим вопрос - можно ли экспортировать в конкретный лист книги и, если он уже есть, заменять его?
С excel-ом, ИМХО, сильно горбатое решение получится. Попробуй ипользовать iif.
Код: Выделить всё
select
наименование,
sum(iif(дата>Now()-7;[количество продаж];0)) as за_неделю,
sum(iif(дата>Now()-30;[количество продаж];0)) as за_месяц,
sum(iif(дата>Now()-365;[количество продаж];0)) as за_год,
from продажи
group by наименование
Вот как заработало... через конструктор налепил. Причем если урезать строку группировки до одного значения - не работает.
SELECT
PRODAGA.NAIM2,
IIf([PRODAGA]![DATA_DOC]>(Date()-7),[PRODAGA]![KOL],0) AS Выражение1, IIf([PRODAGA]![DATA_DOC]>(Date()-14),[PRODAGA]![KOL],0) AS Выражение2, IIf([PRODAGA]![DATA_DOC]>(Date()-30),[PRODAGA]![KOL],0) AS Выражение3, IIf([PRODAGA]![DATA_DOC]>(Date()-60),[PRODAGA]![KOL],0) AS Выражение4, IIf([PRODAGA]![DATA_DOC]>(Date()-90),[PRODAGA]![KOL],0) AS Выражение5
FROM PRODAGA
GROUP BY PRODAGA.NAIM2, IIf([PRODAGA]![DATA_DOC]>(Date()-7),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-14),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-30),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-60),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-90),[PRODAGA]![KOL],0);
SELECT
PRODAGA.NAIM2,
IIf([PRODAGA]![DATA_DOC]>(Date()-7),[PRODAGA]![KOL],0) AS Выражение1, IIf([PRODAGA]![DATA_DOC]>(Date()-14),[PRODAGA]![KOL],0) AS Выражение2, IIf([PRODAGA]![DATA_DOC]>(Date()-30),[PRODAGA]![KOL],0) AS Выражение3, IIf([PRODAGA]![DATA_DOC]>(Date()-60),[PRODAGA]![KOL],0) AS Выражение4, IIf([PRODAGA]![DATA_DOC]>(Date()-90),[PRODAGA]![KOL],0) AS Выражение5
FROM PRODAGA
GROUP BY PRODAGA.NAIM2, IIf([PRODAGA]![DATA_DOC]>(Date()-7),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-14),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-30),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-60),[PRODAGA]![KOL],0), IIf([PRODAGA]![DATA_DOC]>(Date()-90),[PRODAGA]![KOL],0);
Спасибо всем большое за помощь!!!
Правда прогу я уже слил всем заинтересованным лицам, с гемором через Excel, но буду апгрейдить
Правда прогу я уже слил всем заинтересованным лицам, с гемором через Excel, но буду апгрейдить

В SQL, что ты привел, GROUP BY вообще можно убрать, я бы даже сказал нужно.Спартак писал(а):Причем если урезать строку группировки до одного значения - не работает.