![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как возвращать из запроса sum(kol) не null, а 0 [D7, IB6.x]
jiny © (2005-05-17 12:27:00)Проблема следующая, одно поле в запросе это сумма и разность из 3-х таблиц :
делаю так
select name_tov,
(select sum(kol) from fp1_2 where id_tov=num_tov and flag=1)-
(select sum(kol) from fp1_2 where id_tov=num_tov and flag=1)
as ost_tek, (select name_firm from firmproizv where
firmproizv.num_firm=tovar.num_firm) as FirmProizv from tovar where isActive=1 and
((select sum(kol) from fp1_2 where id_tov=num_tov and flag=1)-
(select sum(kol) from fp1_2 where id_tov=num_tov and flag=1))>0
так вот : когда товар присутствует в обоих таблицах, пусть даже с нулевым кол-вом - поле ost_tek возвращает 0, но если в fr1_1 нет такого товара, то получается ПРИХОД-null=null
Пробовал через cast( .... as numeric(15,2)) ничего не получилось,
как мне решить эту проблему ?
Johnmen (2005-05-17 13:24:00) [1]>jiny (17.05.05 13:12) [11]
Почаще в доку заглядывай - будешь меньше спрашивать.
:)
Danilka (2005-05-17 13:22:00) [2][12] ANB © (17.05.05 13:14)
перепроектировать
ANB (2005-05-17 13:14:00) [3]
> должны быть NOT NULL.
- а если уже так в базе запроектировано ?
jiny (2005-05-17 13:12:00) [4]Все заработало, вопрос отпал сам по себе, всем огромное спасибо, а также огромное спасибо тому кто предложил вариант с COALESCE
jiny (2005-05-17 13:08:00) [5]для Zacho © (17.05.05 13:03) [9]
Извиняюсь что дизориентировал Вас у меня FB 1.5 Superserver
Zacho (2005-05-17 13:03:00) [6]jiny (17.05.05 12:56) [8]
В IB нет ни CASE, ни COALESCE. Эти функции есть в FB. А в Yaffil есть IIF.
Так что для IB - только с помощью UDF.
А вообще-то все поля, с которыми предпологается делать запросы с арифметическими функциями должны быть NOT NULL. Тогда и проблем таких не будет.
jiny (2005-05-17 12:56:00) [7]Спасибо, сейчас попробую, а насчет Johnmen © (17.05.05 12:52) [5] торопился, на самом деле fp1-Fr1
ANB (2005-05-17 12:55:00) [8]
> правда в запрос условие не впихнешь
см case и мой пост №1
ANB (2005-05-17 12:54:00) [9]Не Is Null - это оператор, а IsNull() - функция. Если нету - юзай case.
Johnmen (2005-05-17 12:52:00) [10]>(select sum(kol) from fp1_2 where id_tov=num_tov and flag=1)-
>(select sum(kol) from fp1_2 where id_tov=num_tov and flag=1)
По-моему, это всегда = 0
:))
Виталий Панасенко (2005-05-17 12:51:00) [11]UDF, rFunc например.. Там есть Z(F) - если NULL возвращает 0, иначе то, что было...
double EXPORT fn_z(ARG(double*, a))
ARGLIST(double *a)
{ return *a; }
DSKalugin (2005-05-17 12:49:00) [12]Посмотри в сторону
COALESCE
case
jiny (2005-05-17 12:47:00) [13]Есть там такое Is null, правда в запрос условие не впихнешь, надо ХП делать, хотя может и можно как нить, если бы знал не обратился бы сюда, просто это сейчас актуальная проблема для меня, так как не на все рисуются остатки
ANB (2005-05-17 12:36:00) [14]В оракле есть NVL(), в МикроСкуле - IsNull. Поищи нечто подобное в ИБ, а если не найдешь - юзай case when sum(kol) is null then 0 else sum(kol) end. Лучше запихать sum(kol) во вложенный запрос, только не знаю, ест их ИБ, или нет.