Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
ВнизКак обмануть сервер Найти похожие ветки
← →
Виталий Панасенко (2003-02-17 17:46) [0]Вообще-то, у меня два вопроса. Первый: как использовать макроподстановки в FIBPlus, и второй: как обмануть SQL-сервер,(точнее, как получить нужный результат), выполняя запрос:
select sum(summa)+ (select sum(summa) from sum_tbl where id = 0) from sum_tbl where id = 1
Если подзапрос что-то возвращает - нет проблем, а если null, то и результат null, даже если существую записи с Id=1
Как быть ?
← →
Johnmen (2003-02-17 17:49) [1]1. А они там есть ?
2. Обманывать нехорошо ! Но есть UDF.
← →
Виталий Панасенко (2003-02-18 08:55) [2]1.Макро, судя из readme - есть, позволяют подставлять имена таблицы/поля в запросе в качестве параметров.
2.Об UDF слышал, но думал может чего еще есть :-)
Дякую.
← →
Роман Косилов (2003-02-18 10:27) [3]Что касается второго вопроса:
тот запрос что Вы приводите можно более эффективно записать так:
select sum(summa) from sum_tbl where (id = 0)or(id = 1).
А для избавления от NULL можно попробовать сделать так:
select 0.0+sum(summa) from sum_tbl where (id = 0)or(id = 1).
← →
AlexSerp (2003-02-18 11:05) [4]По второму вопросу.
Роман Косилов (18.02.03 10:27) правильно написал.
Я думаю, что в 0.0+sum(summa) можно не писать 0.0+, т.к. не имеет смысла. Все равно просуммируются.
Саня
← →
Sergey Uolis (2003-02-18 12:34) [5]Про макросы читай статью на сайте fibplus.com.ua. Называется типа "Школа ФИБПлюс - Макросы". Более полного описания не бывает.
← →
Val (2003-02-18 13:07) [6]сложение с null все равно вернет null
← →
DarkGreen (2003-02-18 13:44) [7]ИМХО использование nullable полей не есть хорошая практика
Что тебе мешает пробежаться по табличе и сделать:
update my_tbl
set my_field = 0
where my_field is null
И не будет необходимости писать извратные запросы
← →
Val (2003-02-18 13:52) [8]использование nullable полей не есть хорошая практика
стоит уточнить - их использование, где нужно как раз наоборот, NOT NULL.
← →
DarkGreen (2003-02-18 14:48) [9]2 Val © (18.02.03 13:52)
> стоит уточнить - их использование, где нужно как раз наоборот,
> NOT NULL.
Угу, просто у меня все поля нотнул, даже те, которые могут быть нул, я просто ставлю дефолт значения им и потом не парюсь при суммировани NULL значений ;-)
← →
AME (2003-02-18 14:55) [10]LEFT или RIGHT JOIN и проверка на NULL спасет отца демократии.
Если коннект через драйвера ODBC,линкуй таблицы в Access для составления сложных запросов.
Или эмулируй структуру в Access.
← →
Val (2003-02-18 15:19) [11]>DarkGreen © (18.02.03 14:48)
Угу, просто у меня ...
как говорится - "Кто воевал, имеет право" :)
← →
Виталий Панасенко (2003-02-18 17:30) [12]Народ вы меня не поняли ! Я несколько утрировал постановку вопроса (т.е. она не совсем правильна):
select sum(summa)+ (select sum(summa2) from sum_tbl2 where id=1) from sum_tbl1 where id=0
т.е. в выражении используются разные таблицы.
Насчет 0 ор 1 я и сам знаю. Сорри за непонятку :-)
← →
Виталий Панасенко (2003-02-18 17:32) [13]И еще: null появляется не из-за того, что имею поля со значением null (там у меня как раз по умолчанию значение 0), а из-за того, что нет записей удовлетворяющих условию
← →
Desdechado (2003-02-19 12:12) [14]сделай:
select ...
union all
select ...
а на клиенте просуммируй.
или вариант 2:
используй UDF, которая из null сделает 0, а любое число оставит без изменений
← →
Виталий Панасенко (2003-02-19 16:15) [15]Написать-то UDF можно, но как узнать, что это null ...
← →
Desdechado (2003-02-19 18:00) [16]www.ibase.ru
библиотека RLib - функция Z - до ужаса примитивна, но null в 0 превращает :)
← →
Эдуард (2003-02-19 19:29) [17]select sum(summa)+ IsNull((select sum(summa) from sum_tbl where id = 0),0) from sum_tbl where id = 1
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c