Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
SELECT Input.Name, Input.Sort, Sum(IIf(Input.Direction="Поступление",Input.Volume,-Input.Volume)) AS Остаток, (SELECT iif(prihod.volume is NULL, 0, prihod.Volume) FROM sprSort as sprSortPrihod RIGHT JOIN (sprNom as sprNomPrihod RIGHT JOIN Transact AS Prihod ON sprNomPrihod.ID=prihod.Name) ON sprSortPrihod.ID=Prihod.Sort Where ( (Input.Name = Prihod.Name) and (input.Sort = Prihod.Sort) ) and (prihod.Direction="Поступление") and (Prihod.Data = Date())) AS Поступление, (SELECT iif(Rashod.volume is NULL, 0, Rashod.Volume) FROM sprSort as sprSortRashod RIGHT JOIN (sprNom as sprNomRashod RIGHT JOIN Transact AS Rashod ON sprNomRashod.ID=Rashod.Name) ON sprSortRashod.ID=Rashod.Sort Where ( (Input.Name = Rashod.Name) and (input.Sort = Rashod.Sort) ) and (Rashod.Direction="Отгрузка") and (Rashod.Data = Date())) AS Отгрузка
FROM sprSort RIGHT JOIN (sprNom RIGHT JOIN Transact AS [Input] ON sprNom.ID=Input.Name) ON sprSort.ID=Input.Sort
GROUP BY Input.Name, Input.Sort;

Суть запроса сводится к тому что надо показать остатки на текущий день, приход и расход за текущее число.
22 дек 06, 12:41    [3570502]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
ILL HEAD
Member [заблокирован]

Откуда:
Сообщений: 8498
зачем упрощать ? медленный ?
22 дек 06, 13:13    [3570783]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
ILL HEAD
зачем упрощать ? медленный ?


на моей машине все работает быстро. клиенты пока не жалуются, но база пока не очень большая. Плюс к этому появилась необходимость показывать не только объем, но и штуки. Т.е. неизвестно что еще им может в голову придти. (проект на стадии тестирования). Да и вообще как-то он меня пугает. Мне тут в голову приходила мысль по поводу как разбить данные на две таблицы. Но ничего "хорошего" не придумал, во всех случаях добавляется новый геморой.
22 дек 06, 14:16    [3571217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
vrtlpilot
Помогите упростить запрос, плиз
Не могли бы вы пояснить, зачем вам в этом запросе и подзапросах нужны RIGHT-JOIN-связи с sprSort и sprNom?
22 дек 06, 14:30    [3571319]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
Karfaqen
vrtlpilot
Помогите упростить запрос, плиз
Не могли бы вы пояснить, зачем вам в этом запросе и подзапросах нужны RIGHT-JOIN-связи с sprSort и sprNom?

sprNom - справочник "номенклатур"
sprSort - справочник "Сортов"
соотвественно они связаны с историей оперций [Trasact]
а сам Right-join просто тупо скопирован с запроса, который был построен визардом.
22 дек 06, 14:34    [3571345]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
vrtlpilot
sprNom - справочник "номенклатур"
sprSort - справочник "Сортов"
соотвественно они связаны с историей оперций [Trasact]
а сам Right-join просто тупо скопирован с запроса, который был построен визардом.
Нет, вы не поняли. Я не спрашиваю, что оно такое. Я спросил - ЗАЧЕМ вам эти таблицы в вашем запросе? Ни полей из них в селекте, ни условий по их полям я не вижу. Так зачем?
22 дек 06, 14:41    [3571388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
Karfaqen
Нет, вы не поняли. Я не спрашиваю, что оно такое. Я спросил - ЗАЧЕМ вам эти таблицы в вашем запросе? Ни полей из них в селекте, ни условий по их полям я не вижу. Так зачем?

Прошу прощения. действительно не понял, и не заметил своей ошибки, в запросе вместо SELECT Input.Name, Input.Sort, должно быть SELECT sprNom.Name, sprSort.Name
22 дек 06, 15:03    [3571561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
vrtlpilot
должно быть SELECT sprNom.Name, sprSort.Name
Тогда и соответственно там GROUP BY sprNom.Name, sprSort.Name - да?
22 дек 06, 15:11    [3571604]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
Karfaqen
Тогда и соответственно там GROUP BY sprNom.Name, sprSort.Name - да?

Совершенно верно.
22 дек 06, 15:13    [3571627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
Вот чудится мне, что вот как-то так будет оно же:
SELECT sprNom.Name, sprSort.Name, 
SUM(IIf(Transact.Direction="Поступление",Nz(Transact.volume,0),0) AS Поступление,
SUM(IIf(Transact.Direction="Отгрузка",Nz(Transact.volume,0),0) AS Отгрузка,
SUM(IIf(Transact.Direction="Поступление",Nz(Transact.volume,0),-Nz(volume,0)) AS Остаток
FROM Transact, sprNom, sprSort,
Transact LEFT JOIN sprNom ON Transact.Name=sprNom.ID,
Transact LEFT JOIN sprSort ON Transact.Sort=sprSort.ID
WHERE Transact.Data=Date()
GROUP BY sprNom.Name,sprSort.Name

Не проверял, пробуйте.
22 дек 06, 15:19    [3571662]     Ответить | Цитировать Сообщить модератору
 Re: Помогите упростить запрос, плиз  [new]
vrtlpilot
Member

Откуда:
Сообщений: 29
Karfaqen
Вот чудится мне, что вот как-то так будет оно же: ... Не проверял, пробуйте.

Спасибо, сработало. на всякий случай привожу доработанный вариант, авось кому пригодится. ;)
SELECT sprNom.Name, sprSort.Name, 
SUM(IIf((Transact.Direction="Поступление") and (Transact.Data=Date()), nz(Transact.volume,0), 0)) AS Поступление, 
SUM(IIf((Transact.Direction="Отгрузка") and (Transact.Data=Date()), nz(Transact.volume,0),0)) AS Отгрузка, 
SUM(IIf(Transact.Direction="Поступление", nz(Transact.volume,0),-nz(Transact.volume,0))) AS Остаток
FROM (Transact LEFT JOIN sprNom ON Transact.Name=sprNom.ID) LEFT JOIN sprSort ON Transact.Sort=sprSort.ID
GROUP BY sprNom.Name, sprSort.Name;
22 дек 06, 15:53    [3571924]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить