Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обмануть сервер [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо