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

Вниз

null на 0   Найти похожие ветки 

 
rosl   (2007-08-07 04:47) [0]

подскажите.
такой запрос:
select  d.NAME, sum(n.SUMMA_NACH), sum(o.SUMMA), (sum(n.SUMMA_NACH) - sum(o.SUMMA))
from SPR_DOGOVORS d LEFT JOIN OPL o on DOGOVOR = d.ID_KEY, NACH n  
where n.SHET = d.ID_KEY

group by d.NAME

но в таблице OPL не всегда есть значение, поэтому получаем примерно следущее:

NAME       SUM    SUM1     F1
иванов      10         5        5
петров      10

так вот, мне нужно, чтоб результат F1 был ВСЕГДА
можно ли подставить 0 в поле SUM1, если там значение NULL?


 
Сергей М. ©   (2007-08-07 09:27) [1]


> можно ли подставить


Можно.

Только сначала определись, где ты хочешь реализовать подстановку - на стороне  сервера или на стороне клиента.


 
rosl   (2007-08-07 10:26) [2]

лучше клиента.
но можно и сервера. как реализовать? натолкните на мысль...


 
Сергей М. ©   (2007-08-07 10:31) [3]

А тебе нужно иметь 0 вместо Null именно в НД или достаточно видеть этот "0", например, в гриде, отображающем этот НД ?


 
palva ©   (2007-08-07 11:41) [4]

В FireBird 1.5 работает такая конструкция

select sum(s1), case when sum(s2) is null then 0 else sum(s2) end from table1

Может быть в IB такое прокатит?


 
Asail   (2007-08-07 14:17) [5]

В IB 6.x такое не проканает (в более поздних не уверен). Можно написать UDF-функцию..


 
rosl   (2007-08-07 14:32) [6]


> А тебе нужно иметь 0 вместо Null именно в НД или достаточно
> видеть этот "0", например, в гриде, отображающем этот НД
> ?

мне нужно отобразить только суммы, которые больше 1000. но т.к. в некоторых строках поля SUM1 NULL, то соответственно результат F1 тоже NULL, хотя там должена стоять 1000


> select sum(s1), case when sum(s2) is null then 0 else sum(s2)
> end from table1

не прокатила... у меня IB7. ругается на when. говорит - token unknown


 
Сергей М. ©   (2007-08-07 14:35) [7]

см. TField.OnGetText


 
palva ©   (2007-08-07 15:10) [8]

А функция coalesce у вас имеется?
select sum(s1), coalesce(sum(s2), 0) from table1


 
rosl   (2007-08-07 16:26) [9]


> select sum(s1), coalesce(sum(s2), 0) from table1

нет. не проходит. function unknown coalesce


 
Desdechado ©   (2007-08-07 20:29) [10]

Написать UDF.
{----- заменить null на целый ноль -----}
{ DECLARE EXTERNAL FUNCTION NullInt
         INTEGER
         RETURNS INTEGER BY VALUE
         ENTRY_POINT "fn_NullInt" MODULE_NAME "ib_fv";
}
function fn_NullInt( var n: Integer ): Integer; cdecl; export;
begin
 result := n;
end;


 
palva ©   (2007-08-07 22:44) [11]

> нет. не проходит. function unknown coalesce
Интересно, сколько денег заплачено за такой InterBase без coalesce. А африканские дети голодают...


 
Johnmen ©   (2007-08-07 23:27) [12]


> palva ©   (07.08.07 22:44) [11]
> > нет. не проходит. function unknown coalesceИнтересно,
> сколько денег заплачено за такой InterBase без coalesce.

Эта функция нужна, как правило, тем, кто не хочет думать.


 
palva ©   (2007-08-07 23:44) [13]

Johnmen ©   (07.08.07 23:27) [12]
Эта функция нужна, как правило, тем, кто не хочет думать.


Да я вроде пытался подумать. Но ничего не придумал. Помогите автору, если у вас есть решение.


 
Johnmen ©   (2007-08-08 00:18) [14]


> palva ©   (07.08.07 23:44) [13]
> Помогите автору, если у вас есть решение.

Различные решения существуют много лет, ещё с тех давних пор, когда уже были базы данных, программирование и SQL, но ещё не было данной ф-ии. И как-то же обходились, не правда ли?
А самое банальное решение (да и не решение, ибо сабж - это не задача) - не считать в запросе разность. Считать её на клиенте.
Кстати, и автор зачем-то два раза выполняет одно и то же суммирование...


 
palva ©   (2007-08-08 00:54) [15]

> И как-то же обходились, не правда ли?
Чистая правда. И без баз данных обходились. И считали всё на клиенте. И оптимизацию проводили вручную.
Я согласен быть тупым ламером, но мозговые усилия все же предпочитаю экономить. Пусть за меня будет думать SQL-сервер, а мое дело вовремя написать coalesce.


 
Johnmen ©   (2007-08-08 01:09) [16]


> palva ©   (08.08.07 00:54) [15]

Да-да, некоторые предпочитают экономить. На всём. Даже на мозговых усилиях. Видимо, они, сэкономленные, потребуются им в старости. Ну там неожиданный мозговой штурм типа. Для подсчёта пенсии..
:)))


 
iXT ©   (2007-08-08 09:44) [17]

ИМХО 0 <> null, ибо "отсутствие результата - тоже результат" (С). Менять на стороне сервера запрещено . На клиенте отображать хоть штрих-кодом.



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

Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
15-1186073298
Kerk
2007-08-02 20:48
2007.09.02
wget ?


2-1186654674
fisherman
2007-08-09 14:17
2007.09.02
Уникальный код


8-1164902378
Ангела
2006-11-30 18:59
2007.09.02
Есть ли компонент как Image , но


3-1178531718
stud
2007-05-07 13:55
2007.09.02
есть ли аналог


2-1186745000
AlRal
2007-08-10 15:23
2007.09.02
TListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский