Sql server 返回0的和除数

Sql server 返回0的和除数,sql-server,sum,division,Sql Server,Sum,Division,我将用随机数字填充此表: |--week--||-2016-||-2017-| | 1 || 26734||6314916| | 2 || 64565||9876768| | 3 || 32243||9976757| 我想做的是创建第四列,基本上是这些数字的方差。 我创建了下面的脚本,我知道它的工作原理和我为另一个表创建的脚本一样,除了其中的数字,这些表之间没有区别 select CAST(ROUND(sum (([2017]) /(([2016]))-1)*1

我将用随机数字填充此表:

|--week--||-2016-||-2017-|
|  1     || 26734||6314916|
|  2     || 64565||9876768|
|  3     || 32243||9976757|
我想做的是创建第四列,基本上是这些数字的方差。 我创建了下面的脚本,我知道它的工作原理和我为另一个表创建的脚本一样,除了其中的数字,这些表之间没有区别

 select CAST(ROUND(sum (([2017]) /(([2016]))-1)*100, 0) as NUMERIC(36,0))  as [variance%]
来自表2

我得到下面的答案

|--week--||-2016-||-2017-| variance%
|  1     || 26734||6314916|0
|  2     || 64565||9876768|0
|  3     || 32243||9976757|0

为什么我的另一个表提供了方差的实际结果,而我却得到了零?

您需要做的就是将INT转化为float值。大概是这样的:

select 
CAST(ROUND(sum (([2017]*1.0) /(([2016]))-1)*100, 0) as NUMERIC(36,0))  as [variance%]
阅读答案了解更多信息。

使用[2017]*1.0,而不仅仅是[2017]Why>,因为你在做整数演算。首先根据需要将整型列转换或强制转换为浮点或十进制类型。的可能重复项