Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Остаток
 
 автор: ilnur.muhametov   (17.11.2009 в 09:37)   личное сообщение
16 Кб.
 
 

День добрый! Никак не могу решить следующую задачу. Есть таблица движения товаров(см. рисунок). Клиент может взять товар в долг (статус товара Кредит) или сразу оплатить его (статус товара Реализация). Взятый клиентом товар в Кредит может быть Реализован или же Возвращен (статус товара Возврат).

Необходимо узнать сколько у клиента открытых Кредитов на текущую дату (то есть не реализованных и не возвращенных).

  Ответить  
 
 автор: kot_k_k   (17.11.2009 в 09:41)   личное сообщение
 
 

запрос с групиировкой по Клиент, Статус, Товар, Размер - Количество в сумму, Дату в условие

SELECT Таблица1.Клиент, Таблица1.Статус, Таблица1.Товар, Таблица1.Размер, Sum(Таблица1.Кол_во) AS [Sum-Кол_во]
FROM Таблица1
WHERE (((Таблица1.Дата)<=#1/1/2009#))
GROUP BY Таблица1.Клиент, Таблица1.Статус, Таблица1.Товар, Таблица1.Размер;

  Ответить  
 
 автор: ilnur.muhametov   (17.11.2009 в 10:36)   личное сообщение
 
 

Спасибо большое! Сейчас пробую разобраться

  Ответить  
 
 автор: ilnur.muhametov   (17.11.2009 в 11:44)   личное сообщение
12 Кб.
 
 

Спасибо еще раз! Запрос работает (приложил файл).
А возможно сделать чтобы он выводил конкретно те товары которые в долгу(т.е. Кредитные остатки с учетом Реализованных и Возвращенных)?

  Ответить  
 
 автор: kot_k_k   (17.11.2009 в 12:26)   личное сообщение
 
 

времени мало - вот запрос, скопируй и вставь!!!!
но сталкиваясь с такими вещами могу сказать так просто оборотку не сделаешь. всегда потребуется период С и По, т.е. предварительно вычислить что получил-вернул-реализовал Клиент до даты начала периода - получим отсаток на начало + получил-вернул-реализовал - в течении периода (оборот). елси не сделаем остаток на начало получи обороты за период больше выданного!!! и при росте базы это вызывает увеличение времени обработки.

SELECT Таблица1.Клиент, Таблица1.Товар, Таблица1.Размер, Sum(IIf([статус]="Кредит",[Кол_во],0)) AS Кредит, Sum(IIf([статус]="Реализация",[Кол_во],0)) AS Реализация, Sum(IIf([статус]="Возврат",[Кол_во],0)) AS Возврат, Sum(IIf([статус]="Кредит",[Кол_во],0)-IIf([статус]="Реализация",[Кол_во],0)-IIf([статус]="Возврат",[Кол_во],0)) AS Остаток
FROM Таблица1
WHERE (((Таблица1.Дата)<=#12/1/2009#))
GROUP BY Таблица1.Клиент, Таблица1.Товар, Таблица1.Размер
HAVING (((Sum(IIf([статус]="Кредит",[Кол_во],0)-IIf([статус]="Реализация",[Кол_во],0)-IIf([статус]="Возврат",[Кол_во],0)))>0));

п.с. табла "Товары" - это для примера, если нет то надо табла Клиент, Товар (Номенклатура), Вид_Операции, которые связаны с Таблой "Товары"

  Ответить  
 
 автор: ilnur.muhametov   (17.11.2009 в 12:58)   личное сообщение
 
 

Спасибо преогромнейшее! Да я понимаю что если будет очень много данных, то на выполнение запроса будет потрачено много времени. Буду думать как реализовать в будущем периоды. Еще раз Спасибо

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList