Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

null+integer   Найти похожие ветки 

 
Daiz13 ©   (2002-07-22 11:10) [0]

К одной из колонок выборки добавляеться результат другого SELECT. Проблема в том что если эта "другая" выборка возвращает null то в итоге получаем null, хотя TOTALENERGY и больше нуля.

SELECT M.DAYTIME, M.TOTALENERGY, CAST((SELECT sum(COUNTERA) FROM TCOR WHERE daytime<=M.DAYTIME ) AS INTEGER)+M.TOTALENERGY as cor
FROM measures M

Как к null прибавить integer и получить integer?


 
Val ©   (2002-07-22 11:36) [1]

операция с null дает null и это правильно. Для оперирования с числами нужно этот null преобразовывать в 0.


 
oss   (2002-07-22 13:13) [2]

попробуй CONCAT


 
kaif ©   (2002-07-22 14:14) [3]

Боюсь, придется хранимую процедуру писать с FOR SELECT... И перед каждым SUSPEND делать проверку
IF (SUM_COUNTERA IS NULL) и возвращать в этом случае TOTALENERGY.
По скорости не потеряешь.


 
Lord Warlock ©   (2002-07-22 14:16) [4]

Операция преобразования в LocalSQL - CAST


 
Val ©   (2002-07-22 14:28) [5]

неплохо было бы, по-моему, написать функцию типа оракловской nvl, в которую передают два параметра, имя поля и значение. Она проверяет данное поле на null и в случае положительного результата, возвращает второй, переданный ей аргумент, т.е. заменяет null им.
Тогда все выглядело бы так:
SELECT M.DAYTIME, M.TOTALENERGY, CAST((SELECT sum(nvl(COUNTERA,0)) FROM TCOR WHERE daytime<=M.DAYTIME ) AS INTEGER)+M.TOTALENERGY as cor
FROM measures M


 
Ciklon ©   (2002-07-23 22:20) [6]

Можно воспользоваться библиотекой UDF rFunc.dll
В ней приличное количество полезных функций, в том числе имеется функция Z - для проверки входного параметра на NULL и выводе в этом случае значения "0", если входной параметр отличен от NULL, то он передается на выход без изменения.


 
IlyaA   (2002-07-24 08:17) [7]

У меня вчера возникла та-же проблема. Я создал процедуры, которые возвр. нужное значение, а если такой записи нет то 0; и вид с использованием ентих процедур.
Вот что у меня получилось:

CREATE PROCEDURE GET_SELL_CNT (
ITOVAR INTEGER
) RETURNS (
T_CNT INTEGER
) AS
BEGIN
Select cnt From Sell_Tovar Where Tovar_No = :iTovar into :T_Cnt;
if ( :T_Cnt > 0 ) then
Suspend;
else
begin
T_Cnt = 0;
Suspend;
end
END

CREATE PROCEDURE GET_SELL_WES (
ITOVAR INTEGER
) RETURNS (
T_WES FLOAT
) AS
BEGIN
Select Wes From Sell_Tovar Where Tovar_No = :iTovar into :T_Wes;
if ( :T_Wes > 0 ) then
Suspend;
else
begin
T_Wes = 0;
Suspend;
end
END


Это процедуры. Их вид почти одинаков.

CREATE VIEW OSTATKI (
ID,
PO,
PF,
ARTIKUL,
NAME,
PROBA,
TOV_SIZE,
TOVAR_GROUP,
IZGOTOV_NAME,
OST_WES,
OST_CNT,
EI_ID,
EI
) AS
Select Fakt_Tovar.ID as ID, Fakt_Tovar.Price_Otpusk as PO, Fakt_Tovar.Price_Free as PF,
A.Artikul as Artikul, A.Name as Name,
A.Proba as Proba, A.Tov_Size as Tov_Size,
TG.Name as Tovar_Group, I.Name as Izgotov_Name,
( Fakt_Tovar.Wes - (Select Sum(T_Wes) from Get_Sell_Wes( Fakt_Tovar.ID )) ) as Ost_Wes,
( Fakt_Tovar.Tovar_Count - (Select Sum(T_Cnt) from Get_Sell_Cnt( Fakt_Tovar.ID )) ) as Ost_Cnt,
EdI.ID as EI_ID, EdI.Name as EI
From Fakt_Tovar FT, Artikuls A, Tovar_Group TG, Izgotov I, Ed_Izmer EdI
Where ( FT.ARTIKUL_NO = A.ID ) and ( A.Group_No = TG.ID ) and ( A.Izgotov = I.ID ) and
( A.Ed_Izm = EdI.ID )


А это Вид, в котором используются данные процедуры. Вроде всё работает как надо.

Может что-то здесь лучше можно сделать? Заранее спасибо.


 
Val ©   (2002-07-24 10:42) [8]

а если тип строка, к примеру?


 
IlyaA   (2002-07-24 14:23) [9]

Тогда в хранимых проц-х надо проверять не на >0 а на Null


 
Val ©   (2002-07-24 16:49) [10]

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



Страницы: 1 вся ветка

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-35263
koks
2002-07-31 10:51
2002.08.12
TMenuItem


3-35198
Prog_mail
2002-07-20 11:24
2002.08.12
Помогите с отчетом


14-35456
Пастор
2002-07-18 22:41
2002.08.12
Кто знает сайт посвященный С , такой же крутой как этот ?


4-35491
Serd_hhc
2002-06-02 16:24
2002.08.12
Невидимый процесс.


1-35361
roev
2002-07-29 07:36
2002.08.12
поделитесь, у кого есть, ERwin-ом