Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL事例平均公式输出问题_Sql_Sql Server_Case_Average - Fatal编程技术网

SQL事例平均公式输出问题

SQL事例平均公式输出问题,sql,sql-server,case,average,Sql,Sql Server,Case,Average,各位,我需要你们的帮助 我有一个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]

各位,我需要你们的帮助

我有一个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])
下面是字段和输出的示例。
**我无法发布图片,因为我需要更多的信誉点:(***

SQL Server只对整数进行除法,因此您应该将值转换为非整数

我经常使用
*1.0
这样做,比如:

(CASE WHEN SUM(z.[SumTarget$]) <> 0 
      THEN (1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(1.0 * z.[CountofNo]))
 END) as [SumAvPerc]
(SUM(z.[SumTarget$])0时的情况
然后(1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(1.0*z.[CountofNo]))
完)作为[SumAvPerc]

您可以添加图片的链接,有人可以为您添加链接(但是文本会更好)。我猜数据类型是一个(全部?)您的列中有一个整数或一些描述,您使用的RDBMS对整数执行整数除法,例如SQL Server…但我只是猜测。您的数据类型是什么?您使用的RDBMS是什么?您能提供一个简单的示例来说明您的问题吗?是整数数学还是十进制数学的问题。如果UE以整数开头,结果将被舍入。如果值以十进制开头,则它们将不会被舍入。例如:3/2=2,而3/2.0=1.5我认为这与系统如何解释要返回的列的数据类型有关。由于所有涉及的值都是整数,因此它假定整数返回(不是十进制)