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

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

Как застраховаться от нулевых вложенных запросов? [D7, IB6.x]


Страницы:   1 2

Boroda Oleg ©   (2004-06-30 21:39:00) 

Если при написании запроса используются вложенные запросы, то иногда случается ситуация, когда вложеный запрос выдает пустое значение (возможно NULL), и расчет дальше не идет. Возможно ли как-то застраховаться от этого нуля.
Подробнее:
Имеем таблицу Table. В ней поля: ID, DOLG
Имеем таблицу OPLATA. В ней поля: ID_table, SUMM
Значения ID и ID_TABLE - цедые, DOLG и SUMM - с точкой.

Понятно, что оплат по одной строчке может быть много. Поэтому строим запрос:

SELECT T.DOLG
      (SELECT SUM(OP.SUMM) FROM OPLATA OP
       WHERE (OP.ID_TABLE = T.ID)) S_OPL,
      T.DOLG-
      (SELECT SUM(OP.SUMM) FROM OPLATA OP
       WHERE (OP.ID_TABLE = T.ID)) OSTATOK
FROM TABLE T

Если имеется хотя-бы одна оплата, значения S_OPL и OSTATOK считаются правильно. Если нет ни одной оплаты, оба они пусты (хотя, по идее OSTATOK должен быть равен DOLG). Как с этим бороться?

И еще, вдогонку. Если мы, предположим, имеем два поля DOLG1 и DOLG2 - как научить SQL понимать выражение:
Если DOLG2 = 0, то результат = DOLG1
иначе результат = DOLG2


Соловьев   (2004-07-01 11:59:00) [21]


> Имеется процедура MyProcedure(A : integer):integer

хранимая?


Johnmen   (2004-07-01 11:57:00) [22]

>Процедура. Сам я ее нарисовал.

:)
Процедура, возвращающая значение, обычно называется функцией...
Где ты ее нарисовал ?


Boroda oleg   (2004-07-01 11:55:00) [23]

>> Имеется процедура MyProcedure(A : integer):integer

> Может это ф-ия всё-таки ?
> И где она имеется ?
> И вообще на ibase.ru ходил ?

Процедура. Сам я ее нарисовал.
На ibase.ru счас пойду, только что там искать....


Johnmen   (2004-07-01 11:36:00) [24]

>Boroda Oleg   (01.07.04 11:28) [9]

>Имеется процедура MyProcedure(A : integer):integer

Может это ф-ия всё-таки ?
И где она имеется ?
И вообще на ibase.ru ходил ?


asp   (2004-07-01 11:33:00) [25]

Boroda Oleg   (30.06.04 21:39) > СУБД?


Boroda Oleg   (2004-07-01 11:28:00) [26]

Любую. Как составить запрос так, чтобы в нем вызвать функцию?

Имеется процедура MyProcedure(A : integer):integer
(как точно писать не знаю, пишу как в Дельфе)

Нужно вызвать ее в SQL запросе, что-то типа:

SELECT ID, NAME, DOLG,
      MyProcedure(DOLG) OSTATOK, ...
      ^^^^^^^^^^^^^^^^^
      какой формат вызова правильный? У меня на MyProcedure плюется как на заразу.
 И еще, если возвращаются 2 цифры, как это писать нужно (в смысле вызывать).


Johnmen   (2004-07-01 11:18:00) [27]

Какую функцию ?


Boroda Oleg   (2004-07-01 11:17:00) [28]

ЛЮДИ!!!!
Как эту дурную процедуру или функцию вызвать в SQL запросе ???


Desdechado   (2004-07-01 10:33:00) [29]

чтобы NULL превратить в 0, используй функцию из UDF-библиотеки RFunc


Johnmen   (2004-07-01 09:35:00) [30]

Наиболее "дешёвый" вариант с дополнительными бонусами - перейти на FB1.5


Boroda Oleg   (2004-07-01 09:32:00) [31]

У меня тоже мысли насчет процедуры или функции... Только вот, хоть убей, не помню, как ее в SQL засунуть. Народ, подскажите, плис формат.


Vemer   (2004-07-01 00:53:00) [32]

Сделай ХП с проверкой по COUNT..


Fay   (2004-06-30 22:35:00) [33]

fb15 + coalesce


P.N.P.   (2004-06-30 22:06:00) [34]

Можно UDF написать с проверкой значений,
или готовую взять где-нибудь


Страницы:   1 2

Наверх

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