Я пытаюсь придумать единый способ вычисления процентных разниц между двумя столбцами в одной таблице.Иногда num1 равен нулю, и в этом случае рассчитанная разница должна составлять 100%.Иногда num2 равен нулю, и в этом случае рассчитанная разница должна составлять 100%.Иногда различия между num1 и num2 очень велики, и в этом случае расчетная разница будет 100%.
Вот пример выдержки из таблицы:
declare @numtable table ( num1 decimal(10,3) , num2 decimal(10,3) )
insert into @numtable values ( 160 , 161.5 )
insert into @numtable values ( 439 , 377 )
insert into @numtable values ( 100 , 1 )
insert into @numtable values ( 1 , 100 )
insert into @numtable values ( 0 , 20 )
insert into @numtable values ( 20 , 0 )
Я сделал неработающийВыберите оператор, который выглядит следующим образом.
select num1 , num2 , Abs(100- ( 100 * cast( cast(num1 as decimal(6,3)) / cast(num2 as decimal(10,3) ) as decimal(6,3) ) ) ) as percentdiff
from @numtable
Что делает это:
num1 num2 percentdiff
------------ ------------ -------------
160.000 161.500 0.900
439.000 377.000 16.400
100.000 1.000 9900.000
1.000 100.000 99.000
0.000 20.000 100.000
Первые 3 строки в порядке.Пятый ряд строки в порядке.Шестая строка никогда не показывается, потому что она генерирует ошибку деления на ноль.
Я хочу, чтобы мой набор результатов выглядел следующим образом:
num1 num2 percentdiff
------------ ------------ -------------
160.000 161.500 0.900
439.000 377.000 16.400
100.000 1.000 9900.000
1.000 100.000 9900.000
0.000 20.000 100.000
20.000 20.000 100.000
Как мне изменить мой выбор на что-то, что возвращаеткак мне это нужно?
Спасибо.