Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 if sum = 0  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
Подскажите как правильно записать

Есть

select [DateTime], cast(round(sum(cast(Column1 as int))*100.00/sum(cast(Column2 as int)), 2) as decimal(5, 2)) as COLUMN
from dbo.Test group by [DateTime]


Подскажите как поставить проверку если Column1 = 0 то 0 заменить на 100, знаю нужно использовать when но чего то я запутался.

Спасибо.
15 июл 14, 16:32    [16307841]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
VIT2708,

CASE
15 июл 14, 16:35    [16307862]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
VIT2708,

а на 0 делить не боитесь?
15 июл 14, 16:36    [16307879]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
iap
VIT2708,

а на 0 делить не боитесь?


я применю тот же принцип проверки что и к column1
15 июл 14, 16:38    [16307892]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
iap
VIT2708,

CASE


case when Column1 = 0 then 100 это понятно а как его применить к sum(cast(Column1 as int) ?
15 июл 14, 16:42    [16307931]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
VIT2708
iap
VIT2708,

CASE


case when Column1 = 0 then 100 это понятно а как его применить к sum(cast(Column1 as int) ?
Что мешает вставить SUM в функцию CASE?
SELECT логически выполняется после GROUP BY - так что к этому моменту SUM уже посчитается.
Но всегда же можно попробовать.
15 июл 14, 16:46    [16307970]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
iap,

Вы хотите сказать наподобие этого?

case when (sum(cast(Column1 as int) = 0 then 100 end) *100.00


Да я что то не могу понять как это записать
15 июл 14, 16:57    [16308054]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
VIT2708
iap,

Вы хотите сказать наподобие этого?

case when (sum(cast(Column1 as int) = 0 then 100 end) *100.00



Да я что то не могу понять как это записать
Откуда все эти скобки берутся?
case sum(cast(Column1 as int)) when 0 then 100 else sum(cast(Column1 as int)) end * 100.00
или даже
ISNULL(NULLIF(SUM(CAST(Column1 as int)),0),100)
15 июл 14, 17:00    [16308076]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
используйте функцию NULLIF(Колонка, 0) чтобы сбить всё выражение в NULL, если колонка равна 0, а затем оберните всё выражение ISNULL(..., 100)
15 июл 14, 17:01    [16308078]     Ответить | Цитировать Сообщить модератору
 Re: if sum = 0  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
a_voronin
используйте функцию NULLIF(Колонка, 0) чтобы сбить всё выражение в NULL, если колонка равна 0, а затем оберните всё выражение ISNULL(..., 100)
Однако, как мне тут несколько раз указывали,
CASE гораздо понятней для восприятия
15 июл 14, 17:02    [16308093]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить