powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / использование isnull внутри case
11 сообщений из 11, страница 1 из 1
использование isnull внутри case
    #40041701
elay13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понимаю как внутри case использовать isnull. NULL содержится в стобце financed. Нужно преобразовать NULL в столбце financed в 0 подобным образом - isnull(financed,0)


sum(CASE WHEN date_time >='2020-04-01' and date_time <='2020-12-31'
THEN cast((dpd15)as float)END) /
SUM(CASE WHEN date_time >='2020-04-01' and date_time <='2020-11-31'
THEN l(financed,0)END)


Одна из моих моих попыток :


sum(CASE WHEN date_time >='2020-04-01' and date_time <='2020-12-31'
THEN cast((dpd15)as float)END) /SUM(CASE WHEN date_time >='2020-04-01' and date_time <='2020-11-31'
THEN isnull(financed,0)END)as 'dpd15%',
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40041759
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elay13,

зачем Вы хотите разделить на ноль?
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40041951
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И какой результат вы ожидаете получить?

Почему тогда не

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (select 10 as finance union all select cast(null as int) as finance)
select 
    case 
        when isnull(finance, 0) = 0 then 
            0 
    else 
        100/finance 
    end as sm 
from
    t;

?
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40041993
elay13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,
sum(CASE WHEN date_time <='2020-11-30' and fraud_2mob=1
THEN cast((fraud_2mob)as float)
END) / SUM(CASE WHEN
date_time <='2020-11-30'and financed=1
THEN financed
END)as 'fraud2',

вот такое получилось правильным , потребовался день что бы понять что даты 2020-11-31 не существует xD
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40042000
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elay13
Код: sql
1.
date_time <='2020-11-30'

есть же литералы типа date
зачем даты сравнивать со строкой?
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40042006
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create procedure t2
as
begin
	declare @a date = '2020-02-31';
end;
Выполнение команд успешно завершено.

Время выполнения: 2021-02-05T10:25:38.1868069+02:00



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create procedure t1
as
begin
	select 1 where getdate() = {d '2020-02-31'}
end;


сообщение: 241, уровень: 16, состояние: 3, процедура: t1, строка: 4 [строка начала пакета: 8]
Conversion failed when converting date and/or time from character string.

Время выполнения: 2021-02-05T10:26:10.2502368+02:00
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40043140
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx, не воспроизводится!
declare @a date = '2020-02-31';
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Completion time: 2021-02-08T09:47:21.5538838+04:00
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40043154
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

мне кажется, что мой тест несколько отличается от вашего
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40043160
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create procedure t2
as
begin
	declare @a date = '2020-02-31';
end;
Выполнение команд успешно завершено.

Время выполнения: 2021-02-05T10:25:38.1868069+02:00



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create procedure t1
as
begin
	select 1 where getdate() = {d '2020-02-31'}
end;


сообщение: 241, уровень: 16, состояние: 3, процедура: t1, строка: 4 [строка начала пакета: 8]
Conversion failed when converting date and/or time from character string.

Время выполнения: 2021-02-05T10:26:10.2502368+02:00




{d '2020-02-31'} - это "функция ODBC"
https://docs.microsoft.com/en-us/sql/t-sql/functions/odbc-scalar-functions-transact-sql?view=sql-server-ver15
и здесь преобразование даты выполняется в момент компиляции процедуры.
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40043420
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
{d '2020-02-31'} - это "функция ODBC"
https://docs.microsoft.com/en-us/sql/t-sql/functions/odbc-scalar-functions-transact-sql?view=sql-server-ver15
и здесь преобразование даты выполняется в момент компиляции процедуры.
это хорошо, что в момент компиляции ошибка валится

в 100 раз хуже, когда в процессе работы
...
Рейтинг: 0 / 0
использование isnull внутри case
    #40043448
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elay13
env,
sum(CASE WHEN date_time <='2020-11-30' and fraud_2mob=1
THEN cast((fraud_2mob)as float)
END) / SUM(CASE WHEN
date_time <='2020-11-30'and financed=1
THEN financed
END)as 'fraud2',

вот такое получилось правильным , потребовался день что бы понять что даты 2020-11-31 не существует xD


не скажите, в неэвклидовом пространстве еще и не такое есть
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / использование isnull внутри case
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]