Главная страница
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.019 c
15-1185554920
oxffff
2007-07-27 20:48
2007.09.02
Second Life, Second Chance for CodeGear


9-1159426582
benusi
2006-09-28 10:56
2007.09.02
учебник по OpenGL


8-1164182824
DancerMan
2006-11-22 11:07
2007.09.02
*.JPEG true color -> 256 grays


15-1186234015
de.
2007-08-04 17:26
2007.09.02
Проблема!!!


4-1173440828
dzuev
2007-03-09 14:47
2007.09.02
usb - порт и принтер