Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

Можно ли обратиться к вычисляемому полю не повторяя запроса   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
15-1187797221
Неудачник
2007-08-22 19:40
2007.09.23
Программисты – это армия физиков-неудачников


11-1171706959
Vladimir Kladov
2007-02-17 13:09
2007.09.23
версия 2.52


15-1187846202
Ega23
2007-08-23 09:16
2007.09.23
Для тех, кто в курсе


10-1136900689
Alexey V.
2006-01-10 16:44
2007.09.23
Обновление данных в Excel


11-1171955913
ryslan56
2007-02-20 10:18
2007.09.23
Бывалым