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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2014, 16:58   #1
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию SQL Запрос

Имеем следующий запрос:
Код:
SELECT *, (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE) as VYPLATA FROM KREDIT
Как видоизменить запрос, чтобы вместо значения Null в переменной VYPLATA выдавалось 0, а в остальных случаях значение не изменялось?
SlavaSH вне форума Ответить с цитированием
Старый 27.03.2014, 17:12   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

isnull, только здается что запрой у вас плохой
eval вне форума Ответить с цитированием
Старый 27.03.2014, 17:14   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ISNULL или аналог применить к подзапросу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.03.2014, 19:34   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
SELECT *, 
case when
(SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)=null then 0
else (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)
end  as VYPLATA FROM KREDIT
Оно?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 28.03.2014, 09:06   #5
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
Код:
SELECT *, 
case when
(SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)=null then 0
else (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)
end  as VYPLATA FROM KREDIT
Оно?
большое спасибо, правда с этим кодом у меня что-то все равно не работает. Сделал такой код:

Код:
SELECT *, 
case when
(SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)>0 then (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE)
else 0
end  as VYPLATA FROM KREDIT
все пошло
SlavaSH вне форума Ответить с цитированием
Старый 28.03.2014, 10:00   #6
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Код:
SELECT *, 
 coalesce(
 (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE),0) as VYPLATA 
FROM KREDIT
А вообще лучше переделать запрос под JOIN вместо подселекта
superedward вне форума Ответить с цитированием
Старый 28.03.2014, 10:37   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Лучше в данном случае ISNULL.

COALESCE(A,B) эквиваленто:
CASE WHEN A IS NOT NULL THEN A ELSE B END

В нашем случае подзапрос может выполняться дважды

ISNULL этим не страдает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.03.2014, 15:41   #8
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от superedward Посмотреть сообщение
Код:
SELECT *, 
 coalesce(
 (SELECT SUM (SUMMA_VYPLATY) FROM VYPLATA_KREDIT where CODE_KREDIT = CODE_TABLE),0) as VYPLATA 
FROM KREDIT
А вообще лучше переделать запрос под JOIN вместо подселекта
норм, прекрасно работает, а код наглядней выглядит, большое спасибо!
SlavaSH вне форума Ответить с цитированием
Старый 28.03.2014, 16:15   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
В нашем случае подзапрос может выполняться дважды
для автора код, хоть и кривой важнее
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос SQL Andrey85 БД в Delphi 2 11.09.2010 18:05
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
sql запрос Yura_S SQL, базы данных 6 27.10.2009 15:56
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15