Главная страница
    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.044 c
2-1186558517
Евгений Р.
2007-08-08 11:35
2007.09.02
upper для русских букв FB 1.5.3


15-1186074214
TStas
2007-08-02 21:03
2007.09.02
По каким книжкам люди инстоляторы писать учатся?


15-1186137353
de.
2007-08-03 14:35
2007.09.02
О материалах


15-1186089042
Модуль
2007-08-03 01:10
2007.09.02
Как отловить нажатия на кнопки вверх, вниз, на панели?


3-1178781838
alexey_mas
2007-05-10 11:23
2007.09.02
передача процедуры в процедуре





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