2012-01-17 4 views
2

Примечание: Я прочитал аналогичные потоки на SO, но не помог в этом запросе.Ошибка преобразования типа данных varchar в float - связанный с ISNULL

Я воспроизвел следующий код, который похож на мою реальную проблему. Я должен использовать этот синтаксис, потому что он уже используется в базе данных, если нет убедительного совета, здесь логика неправильная.

В моей реальной задаче этот вопрос работает , но не в течение определенного времени, но с ошибкой. После исследования я обнаружил, что проблема

ISNULL(amount,0) 

Это происходит потому, что если категория имеет оба значения 0,0 или оба значения NULL, NULL, ISNULL делает их строку и поэтому я получаю

Ошибка преобразование типа данных VARCHAR плавать

Ниже мой тестовый код с комментариями

create table #table1 (
id int not null primary key identity, 
category varchar(10), 
amount float null 
) 

insert into #table1 values('A',23) 
insert into #table1 values('A',23) 
insert into #table1 values('B',NULL) 
insert into #table1 values('B',0) 
insert into #table1 values('C',NULL) 
insert into #table1 values('C',NULL) 
insert into #table1 values('D',0) 
insert into #table1 values('D',0) 

select * from #table1 -- works 

select category, sum1 -- works 
from 
(select category, SUM(Round(ISNULL(amount,0),0)) as Sum1 from #table1 
group by category) D 

select category, sum2 = -- does not work 
case Sum1 
    when 'A' then Sum1 * 1 -- my problem is here 
    when 'B' then Sum1 * 2 -- this is the logic in my actual code 
    when 'C' then Sum1 * 3 -- would like to make this query work 
    when 'D' then Sum1 * 4 
    else Sum1 
end 
from 
(select category, SUM(Round(ISNULL(amount,0),0)) as Sum1 from #table1 
group by category) D 

Что я делаю неправильно?

ответ

3

Не должно ли ваше заявление о случаях быть «категориями случаев», а не «суммой 1»?

Если вы измените это, запрос будет работать, как ожидалось.

+0

Это был точный ошибку, которую я сделал в самом коде. Благодарю. Это ответ –

2

ваш случай нужно смотреть на категории не sum1

select category, sum2 = -- does not work 
case category 
    when 'A' then Sum1 * 1 -- my problem is here 
    when 'B' then Sum1 * 2 -- this is the logic in my actual code 
    when 'C' then Sum1 * 3 -- would like to make this query work 
    when 'D' then Sum1 * 4 
    else Sum1 
end 
from 
(select category, SUM(Round(ISNULL(amount,0),0)) as Sum1 from #table1 
group by category) D 
Смежные вопросы