Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
1-35268
msalex
2002-07-29 22:46
2002.08.12
TStreame: глюк или ошибка?


8-35389
Yaro
2002-04-04 17:53
2002.08.12
Быстрее ScanLine


1-35238
ilg
2002-07-30 16:55
2002.08.12
Компонент на основе TLabel


14-35429
Л.Ге
2002-07-15 11:25
2002.08.12
Вывод в DBGrid c произвольной строки (D6, IB6)


3-35228
VictorT
2002-07-24 14:49
2002.08.12
Как в sql получить строки, в которых дублируются...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский