Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2011, 00:11   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Правильный результат разности полей содержащих "NULL"

Здравствуйте,
подскажите пожалуйста, (хочу правильней написать запрос):
Есть два поля, "Field1" "Field2" с типом "NUMERIC", и запрос №1:

Код:
select (case when (sum(Field1) - sum(Field2))<>0 then (sum(Field1) - sum(Field2)) else 0 end) as Field3
from TABLE1 where T_id=447

но во всех строках поля "Field2" у меня содержится "null", поэтому результат запроса не "sum(Field1)" как хотелось бы, а Field3 ="null".
После доработки предыдущего запроса к виду (запрос №2):

Код:
select (case when (coalesce(sum(Field1),0) - coalesce(sum(Field2),0))<>0 then (coalesce(sum(Field1),0) - coalesce(sum(Field2),0)) else 0 end) as Field3 from TABLE1 where T_id=447
результат стал меня устраивать, т.е. если "sum(Field2)"= "null", то результат запроса равняется: sum(Field1).
Вопрос:
Можно ли как-нибудь упростить запрос №2?

P.S.
Значения "null" в полях быть должно, т.к. необходимо знать в каких полях значений не существует
KBO вне форума Ответить с цитированием
Старый 06.08.2011, 00:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По-моему это тоже самое, что у вас, но короче и оптимальней. Зачем case не понял, при совпадении разница и так 0 будет
Код:
SELECT COALESCE(SUM(Field1),0)-COALESCE(SUM(Field2),0) AS Field3 
  FROM Table1 
  WHERE T_id=447
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2011, 02:55   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
По-моему это тоже самое, что у вас, но короче и оптимальней. Зачем case не понял, при совпадении разница и так 0 будет
Код:
SELECT COALESCE(SUM(Field1),0)-COALESCE(SUM(Field2),0) AS Field3 
  FROM Table1 
  WHERE T_id=447

Спасибо "Аватар", за ответ!

Насколько я понял, мне и впредь придется использовать комбинацию с "COALESCE" для ПРАВИЛЬНОГО подсчета данного типа полей

Последний раз редактировалось KBO; 06.08.2011 в 03:05.
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск "почти" одинаковых полей в таблице хИринах БД в Delphi 5 22.06.2010 22:18
Правильный параметр "командная строка" в макрокоманде "ЗапускПриложения". peektoseen Microsoft Office Access 3 10.03.2010 19:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
"not null" и триггер в IBase/FB Surgeon БД в Delphi 15 10.10.2008 14:55