Вопрос!!! По запросу

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Василий
Сообщения: 2
Зарегистрирован: 03 фев 2005, 13:17

Вопрос!!! По запросу

Сообщение Василий » 03 фев 2005, 13:31

Проблема!
Есть запрос:
(Сумма по столбцу одной таблицы) - (Сумма по столбцу второй таблицы)

Если какая-либо из сумм возвращает Null, то результат этого запроса тоже Null.
А надо результат вычитания! Как это обойти?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 фев 2005, 16:51

нет такой проблемы.
или не используй null, или конвертируй null через coalesce. coalesce есть только в FB 1.5 и IB 7.5.
или в where пиши условие столбцам на is not null.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 03 фев 2005, 17:04

kdv писал(а):нет такой проблемы.
или не используй null, или конвертируй null через coalesce. coalesce есть только в FB 1.5 и IB 7.5.
или в where пиши условие столбцам на is not null.
Дим, в SUM у него нулл может быть только если это Left или Full Join. И тут уж не использовать его ну никак не получится. И Where тоже не поможет, Having только, но тогда смысл Left пропадёт. Так что остаются только функции нуллозамещения. В старину по-моему какой-то удфкой для этого пользовались.

ЗЫ А ты чо сегодня такой сурьёзный? Тут ведь очень смешно было :)

Дмитрий
Сообщения: 127
Зарегистрирован: 26 окт 2004, 11:05

Сообщение Дмитрий » 03 фев 2005, 17:10

В старину по-моему какой-то удфкой для этого пользовались
В библиотеке rFunc такая есть. называется.
Если параметр имеет значение NULL, то 0. Во всех остальных случаях возвращается то, что передается.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 фев 2005, 18:35

это у меня смех такой - хрясь, и нету пары-тройки сообщений :-) попорченные нервы вкупе с возможностью отмодерировать. :-)

Василий
Сообщения: 2
Зарегистрирован: 03 фев 2005, 13:17

UDF-ка ?

Сообщение Василий » 03 фев 2005, 21:43

И где взять эту UDF-ку "rFunc"

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 03 фев 2005, 22:11

И где взять эту UDF-ку "rFunc"
Не поверишь! www.ibase.ru->поиск->rfunc
Тут ведь очень смешно было
Я не нашел:(
Это DK уже успел отмодерить (отхрясить) весь юмор?
в SUM у него нулл может быть только если это Left или Full Join. И тут уж не использовать его ну никак не получится. И Where тоже не поможет, Having только, но тогда смысл Left пропадёт.
Савсем я плохой стал. Ничонипонял. :) Ну а если и не Left и не Full, а where 1=2?

Дмитрий
Сообщения: 127
Зарегистрирован: 26 окт 2004, 11:05

Сообщение Дмитрий » 04 фев 2005, 09:39

И где взять эту UDF-ку "rFunc"
http://rfunc.sourceforge.net/rus/

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 04 фев 2005, 13:31

sag писал(а): Это DK уже успел отмодерить (отхрясить) весь юмор?

Успел :( Тут от нуллов советовали избавляться кастом в numeric (15,2) :-D
sag писал(а): я плохой стал. Ничонипонял. :) Ну а если и не Left и не Full, а where 1=2?
А тогда нулл будет не только в сумах. И eof=true :) На самом деле я не очень внятно бухтел. Просто OUTER, любая разновидность. SUM пропускает нуллы, поэтому если INNER или просто запрос по одной таблице возвращает NULL в SUM, то это значит, что он вообще ничего не возвращает. Или крайний случай - ВСЕ записи, попадающие в SUM содержат нулл в этом поле.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 фев 2005, 14:11

ничего не трогал. я чужие посты редактирую очень редко. например если приводят здоровенный код, а причина проблемы вовсе не в коде. Тогда просто чтобы уменьшить объем текста, чикаю. но последний раз "чикал" недели две назад.

Ответить