Объединение нескольких выборок (MS Access 97)

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

Есть таблица "продажи", где есть три столбца - наименование, дата и количество продаж
Из этого я формирую три запроса - продажи за последнюю неделю, последний месяц и последний год. Как это потом свести в одну таблицу формата
наименование:продажи за последнюю неделю:последний месяц:последний год
?
Спасибо
Аватара пользователя
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
Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

Не работает,
Ошибочное или пропущенное зарезервированное слово или аргумент в инструкции SELECT или неверная пунктуация.
В чем может быть проблема?
Естественно вторая строчка "наименованИе", но не работает
Менял все имена на латиницу - таблица PRODAGA, дата=DATA_DOC, количество продаж = KOL, наименование=NAIM2
Не получается
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Прошу прощения, во всех вложенных запросах я пропустил название таблицы:

есть ...from where...

а надо ...from продажи where...

Еще попробуйте в конструкторе запросов этот запрос открывать. Там должны получиться просто вычисляемые поля.
Например: "За_неделю :( select....)"
Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

Увы... м.б.версия Access? или мои кривые руки.... ну не работает...
в конструкторе не открывается - пишет ту же ошибку
Можно по шагам расписать?
Я создаю запрос/конструктор, переключаюсь в SQL вид, забиваю код... после этого запускаю... Что не так?
Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

ОК, я решил экспортировать все в Excel, потом объединить все через СУММЕСЛИ
В связи с этим вопрос - можно ли экспортировать в конкретный лист книги и, если он уже есть, заменять его?
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

С excel-ом, ИМХО, сильно горбатое решение получится. Попробуй ипользовать iif.

Код: Выделить всё

select 
  наименование, 
  sum(iif(дата>Now()-7;[количество продаж];0)) as за_неделю, 
  sum(iif(дата>Now()-30;[количество продаж];0)) as за_месяц, 
  sum(iif(дата>Now()-365;[количество продаж];0)) as за_год, 
from продажи
group by  наименование
Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

Вот как заработало... через конструктор налепил. Причем если урезать строку группировки до одного значения - не работает.
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);
Спартак
Сообщения: 22
Зарегистрирован: 08 окт 2004, 09:23

Спасибо всем большое за помощь!!!
Правда прогу я уже слил всем заинтересованным лицам, с гемором через Excel, но буду апгрейдить :)
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

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