Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как возвращать из запроса 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) во вложенный запрос, только не знаю, ест их ИБ, или нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо