Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.48 MB
Время: 0.045 c
15-1187724746
Rouse_
2007-08-21 23:32
2007.09.23
Возвращение к истокам


1-1183993705
Dr. Andrew
2007-07-09 19:08
2007.09.23
Во время показа hints мелькает фоном стандартная подсказка.


3-1179820144
Layner
2007-05-22 11:49
2007.09.23
Ввод в DBGrid дробной части - запятая всегда печаталась


1-1184211090
Phoenix
2007-07-12 07:31
2007.09.23
Необходимо определить были ли пороизведенны изменения на форме


15-1187864995
DVM
2007-08-23 14:29
2007.09.23
MD5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский