2015-02-05 49 views
0

每个人 - 我可以使用你的帮助。SQL案例平均公式输出问题

我有一个SQL,我正在检查一列,看看是否有金额。如果不是,我希望它输出NULL。如果是这样,我希望它计算一个平均值。我正在使用这个case语句,并且NULL语句工作正常,但是我的平均语句只是吐出1或0.我一直在搜索和测试几个小时,但没有运气。

CASE 
WHEN SUM(z.[SumTarget$]) = 0 THEN NULL 
ELSE (1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(z.[CountofNo])) 
END [SumAvPerc] 

我已经被注释掉线3,用这个代替,以确保数字是正确的进入公式,到目前为止,一切正常检查字符串中的每个字段。

--ELSE SUM(z.[SumStockedOut]) 

以下是字段和输出的示例。 **我无法发布图片,因为我需要更多的声望值:(**

+0

您可以添加一个链接到图片,有人可以将其添加为你(但文字会更好)我猜一个数据类型(。所有?)的列是一个整数或一些描述,并且您正在使用对整数执行整数除法的RDBMS,例如SQL Server ......但是我只是猜测。你的数据类型是什么?你使用的是什么RDBMS?你能提供一个能证明你的问题的最小例子吗? – Ben 2015-02-05 21:11:08

+0

是整数数学与十进制数学的问题。如果值是整数,则结果将被舍入。如果这些值是小数点开始,他们不会。例如:3/2 = 2而3/2.0 = 1.5我相信这与系统如何解释返回列的数据类型有关。由于所涉及的所有值都是整数,因此它假定整数返回(不是十进制) – xQbert 2015-02-05 21:11:45

回答

2

SQL Server只不上intgers整数除法,所以您应将值转换成非整数。

我经常做此用* 1.0,是这样的:

(CASE WHEN SUM(z.[SumTarget$]) <> 0 
     THEN (1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(1.0 * z.[CountofNo])) 
END) as [SumAvPerc] 
+0

戈登 - 你是炸弹!它的作品谢谢! – SkottyP 2015-02-05 21:45:21