![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как застраховаться от нулевых вложенных запросов? [D7, IB6.x]
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 написать с проверкой значений,
или готовую взять где-нибудь