Оператор SQL Case применяет предложение else, когда условие истинно - PullRequest
0 голосов
/ 28 августа 2018

Когда я запускаю следующий оператор запроса sql, он не форматируется как числовой (10,0)

но числовой (10,3).

Если я заменю приведение (октябрь как числовое (10,3)) на ноль, это сработает.

select case when col='Gallons' 
            then cast(Oct as numeric(10,0))
else cast(Oct as numeric(10,3))
end as Oct
from (select 'Gallons' as col, 225.00 as Oct) a 

Почему он так себя ведет?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Чтобы сохранить оба формата, вы можете привести числовые значения к varchar:

select case when col='Gallons' then cast(cast(Oct as numeric(10,0)) as varchar(max))
else cast(cast(Oct as numeric(10,3)) as varchar(max)) end as Oct
from (select 'Gallons' as col, 225.00 as Oct union all select 'Other' as col, 123.45 as Oct) a 

Результат:

enter image description here

0 голосов
/ 28 августа 2018

A case выражение возвращает один тип. Это должно быть между numeric(10, 0) и numeric(10, 3). Последний является более общим, поэтому он выберет это.

Если вы хотите контролировать, как будет выглядеть результирующий набор, преобразуйте значение в строку:

select (case when col = 'Gallons'
             then cast(cast(Oct as numeric(10, 0)) as varchar(255))
             else cast(cast(Oct as numeric(10, 3)) as varchar(255))
        end) as Oct
from (select 'Gallons' as col, 225.00 as Oct) a 

Вы также можете сделать это, используя функцию str().

...