Форум: "Базы";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
ВнизМожно ли обратиться к вычисляемому полю не повторяя запроса Найти похожие ветки
← →
jiny (2007-05-22 13:02) [0]Во 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...)
Спасибо за внимание.
← →
Johnmen © (2007-05-22 13:10) [1]
> Можно ли обратиться к вычисляемому полю не повторяя запроса
В приведенном контексте - нет.
← →
jiny (2007-05-22 13:29) [2]в какой контекст лучше привести запрос (в ХП или VIEW) ? ХП не принимает в "продолжение" запроса (приращивание условий) в качестве строки (varchar), может кто подскажет как можно формировать ХП с помощью входящих строковых параметров, может какая-нить внешняя цепляемая библиотека , типа rfunc, имеющая функцию интерпретатора ?
← →
jiny (2007-05-22 13:31) [3]Реальный запрос раз в 10 больше приведенного выше, а в процедуре он увеличивается еще в несколько раз засчет условий
← →
Правильный Вася (2007-05-22 13:37) [4]а что, BETWEEN уже не в моде?
← →
jiny (2007-05-22 13:49) [5]Правильный Вася (22.05.07 13:37) [4]
для тех кто случайно пропустил начало, отвечаю :
between и все прочее работает, даже если его у меня нет - запрос все равно работает так как мне нужно и выдает то что мне нужно, проблема в другом : НЕВОЗМОЖНО НЕСКОЛЬКО РАЗ обратиться к вычисляемым полям, так как превышается допустимое кол-во связей (BLR Offset), я лишь уточнял, возможно ли обойтись без формирования запроса в ХП и Вьюшках.
Как видится - нет, видимо сам и ответил на свой вопрос, за что мне любимому и огромнейшее спасибо, может даже пиво себе поставлю, если не зажму :)
← →
Johnmen © (2007-05-22 13:49) [6]
> в какой контекст лучше привести запрос (в ХП или VIEW) ?
Лично я сделал бы ХП, как наиболее гибкий и быстрый вариант.
← →
Правильный Вася (2007-05-22 14:00) [7]для тех, кто не вникся, отвечаю, что BETWEEN может значительно уменьшить число подзапросов, укоротив проблемные области до допустимой длины
← →
jiny (2007-05-22 14:49) [8]Johnmen © (22.05.07 13:49) [6]
спасибо, я в принципе так и думал, но боялся этого, придется разбираться более детально, но в любом случае спасибо, что подтвердили мои опасения.
для Правильный Вася (22.05.07 14:00) [7]
BETWEEN не может сократить число обращений к таблицам если их и на минимум значений (1) строчка. Представь 1 товар (меньше уже некуда) = более 255 связей .... Есть идеи помимо BETWEEN ?
Спешу тебя заверить и , наверно успокоить, что слава богу, BETWEEN я использую и обещаю впредь использовать, но ты так и не понял вопроса, очень жаль, но спасибо, что постарался.
Буду пробовать через ХП, спасибо.
← →
bds (2007-05-22 14:53) [9]а в FB1.5 такое: select * from ( your select ) as t where ost_tek<>0 - не проходит?
← →
Правильный Вася (2007-05-22 15:03) [10]
> 1 товар = более 255 связей
в запросе всего-то 2 таблицы, откуда столько связей?
или ты на каждый месяц подзапросы лепишь?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c