![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли обратиться к вычисляемому полю не повторяя запроса [D7, FB1.5]
jiny © (2007-05-22 13:02:00)Во View или в ХП пока не хочу вставлять, потому как запрос формирует клиент-программа по критериям, определяемым конечным пользователем, т.е. я уже пробовал делать ХП но она получается слишком большой для записи, а при обращении к вычисляемым полям после WHERE приходится повторять текст запроса вычисляемого поля? после чего получаю BLR Offset, что количество связей превышено, может кто сталкивался с подобным в FB ? Буду рад любым советам.
Текст самого запроса здесь я цитировать не буду, т.к. он велик и в принципе с работоспособностью его нет проблем, процитирую лишь смысл запроса :
select num_tov,name_tov,
(select sum(kol) from tPrih where ....дата до 01.04.07)-
(select sum(kol) from tRash where ....дата до 01.04.07) as ost_tek, //начальный остаток до апреля 2007
(select sum(kol) from tPrih where ....весь апрель) as ost_prih, //количество прихода товара за апрель
(select sum(kol) from tRash where ....весь апрель) as ost_rash, //количество расхода товара за апрель
(select sum(kol) from tRash where ....весь апрель)
*100
/
((select sum(kol) from tPrih where ....дата до 01.04.07)-
(select sum(kol) from tRash where ....дата до 01.04.07))+
(select sum(kol) from tPrih where ....весь апрель) as rash_procent //процент продаж относительно имеющегося кол-ва товара
where
(select sum(kol) from tRash where ....весь апрель)
*100
/
((select sum(kol) from tPrih where ....дата до 01.04.07)-
(select sum(kol) from tRash where ....дата до 01.04.07))+
(select sum(kol) from tPrih where ....весь апрель)<10 //Где продажи идут менее 10% от имеющегося на тот момент количества товара
AND
(select sum(kol) from tPrih where ....дата до 01.04.07)-
(select sum(kol) from tRash where ....дата до 01.04.07)<>0 //Остаток товара
Можно ли обратиться после Where как-нибудьost_tek<>0или3<>0ставлю
такое условиеand 2 like "%Диски%"выдает ошибку на арифм. переполнение, либо деление на ноль или не совпадение строковых типов (Arithmetic overlow...)
Спасибо за внимание.
Правильный Вася (2007-05-22 15:03:00) [1]
> 1 товар = более 255 связей
в запросе всего-то 2 таблицы, откуда столько связей?
или ты на каждый месяц подзапросы лепишь?
bds (2007-05-22 14:53:00) [2]а в FB1.5 такое: select * from ( your select ) as t where ost_tek<>0 - не проходит?
jiny (2007-05-22 14:49:00) [3]Johnmen © (22.05.07 13:49) [6]
спасибо, я в принципе так и думал, но боялся этого, придется разбираться более детально, но в любом случае спасибо, что подтвердили мои опасения.
для Правильный Вася (22.05.07 14:00) [7]
BETWEEN не может сократить число обращений к таблицам если их и на минимум значений (1) строчка. Представь 1 товар (меньше уже некуда) = более 255 связей .... Есть идеи помимо BETWEEN ?
Спешу тебя заверить и , наверно успокоить, что слава богу, BETWEEN я использую и обещаю впредь использовать, но ты так и не понял вопроса, очень жаль, но спасибо, что постарался.
Буду пробовать через ХП, спасибо.
Правильный Вася (2007-05-22 14:00:00) [4]для тех, кто не вникся, отвечаю, что BETWEEN может значительно уменьшить число подзапросов, укоротив проблемные области до допустимой длины
jiny (2007-05-22 13:49:00) [5]Правильный Вася (22.05.07 13:37) [4]
для тех кто случайно пропустил начало, отвечаю :
between и все прочее работает, даже если его у меня нет - запрос все равно работает так как мне нужно и выдает то что мне нужно, проблема в другом : НЕВОЗМОЖНО НЕСКОЛЬКО РАЗ обратиться к вычисляемым полям, так как превышается допустимое кол-во связей (BLR Offset), я лишь уточнял, возможно ли обойтись без формирования запроса в ХП и Вьюшках.
Как видится - нет, видимо сам и ответил на свой вопрос, за что мне любимому и огромнейшее спасибо, может даже пиво себе поставлю, если не зажму :)
Johnmen (2007-05-22 13:49:00) [6]
> в какой контекст лучше привести запрос (в ХП или VIEW) ?
Лично я сделал бы ХП, как наиболее гибкий и быстрый вариант.
Правильный Вася (2007-05-22 13:37:00) [7]а что, BETWEEN уже не в моде?
jiny (2007-05-22 13:31:00) [8]Реальный запрос раз в 10 больше приведенного выше, а в процедуре он увеличивается еще в несколько раз засчет условий
jiny (2007-05-22 13:29:00) [9]в какой контекст лучше привести запрос (в ХП или VIEW) ? ХП не принимает в "продолжение" запроса (приращивание условий) в качестве строки (varchar), может кто подскажет как можно формировать ХП с помощью входящих строковых параметров, может какая-нить внешняя цепляемая библиотека , типа rfunc, имеющая функцию интерпретатора ?
Johnmen (2007-05-22 13:10:00) [10]
> Можно ли обратиться к вычисляемому полю не повторяя запроса
В приведенном контексте - нет.