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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
6-1168754919
DRtM
2007-01-14 09:08
2007.09.02
Проблемма с закачкой


3-1178518763
pavel_guzhanov
2007-05-07 10:19
2007.09.02
Unicode в Oracle


15-1186261619
Kostafey
2007-08-05 01:06
2007.09.02
С днем рождения ! 5 августа


1-1182078980
zzz(KOT)zzz
2007-06-17 15:16
2007.09.02
Проблемы с графикой в Delphi, Индексирование цвета


8-1164363431
SergeyP
2006-11-24 13:17
2007.09.02
Звуковая схема Windows