2012-08-16 30 views
1

我在做SQL Server查询计算,并且划分总是给我零。在Sql Server中划分2个数字

SUM(sl.LINES_ORDERED) 
, SUM(sl.LINES_CONFIRMED) 
, SUM(sl.LINES_CONFIRMED)/SUM(sl.LINES_ORDERED) AS 'Percent' 

返回的样本数据集是:

enter image description here

在这个例子中,第三行应该具有1.02的除法值,但它示出为零。这是为什么?

+0

注意,没有对值的可以给你1.02作为划分的结果,因为在每一对分红都小于除数。 (根据你的代码,第二个值除以第一个值,但你似乎已经通过其他方式验证了你的结果。) – 2012-08-16 10:36:54

+0

是哎呀,我的坏.....你是对的! :) – 2012-08-16 10:42:33

回答

21

尝试

SUM(sl.LINES_CONFIRMED) * 1.0/SUM(sl.LINES_ORDERED) 

的整数等分只能返回全数字,而不是浮点数。你可以像上面的例子那样强制执行一个浮点运算。

3

试试这样说:

SUM(sl.LINES_ORDERED) 
, SUM(sl.LINES_CONFIRMED) 
, SUM(sl.LINES_CONFIRMED)*1.0/SUM(sl.LINES_ORDERED) 
+0

感谢您的回复! :) – 2012-08-16 10:47:55

+0

@JustinSamuel np :) – 2012-08-16 10:54:18

1

那是因为你divinding两个整数。

在划分第一转换的两个值,以小数:

, SUM(convert(decimal(12,2),sl.LINES_CONFIRMED)) 
/SUM(convert(decimal(12,2),sl.LINES_ORDERED)) AS 'Percent' 
2

这两个问题是,你

  1. 执行整数除法(SUM返回一个整数),和
  2. 你调换了股息和除数(这就是为什么你得到零而不是一个)。

这是你如何可以修复它(注意,LINES_ORDEREDLINES_CONFIRMED被交换):

SUM(sl.LINES_ORDERED) 
, SUM(sl.LINES_CONFIRMED) 
, (1.0*SUM(sl.LINES_ORDERED))/SUM(sl.LINES_CONFIRMED) AS 'Percent' 
+0

感谢您的回复! :) – 2012-08-16 10:48:33