Примечание: Я прочитал аналогичные потоки на 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
Что я делаю неправильно?
Это был точный ошибку, которую я сделал в самом коде. Благодарю. Это ответ –