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