Форум: "Начинающим";
Текущий архив: 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