Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
C# 无数据查询的除以零错误返回_C#_Asp.net_Sql_Gridview_Sql Server 2012 - Fatal编程技术网

C# 无数据查询的除以零错误返回

C# 无数据查询的除以零错误返回,c#,asp.net,sql,gridview,sql-server-2012,C#,Asp.net,Sql,Gridview,Sql Server 2012,我正在想办法解决这个除以零的错误。我目前面临的挑战来自 下面是我正在使用的代码,我正在插入到年底的报告中: SELECT CAST(ROUND((.01 * 2541) / Count(date_record_entered), 1) AS decimal(5,1)) FROM dbo.tablename WHERE date_record_entered IS NOT NULL and date_record_entered >= 20131201 AND date_record_

我正在想办法解决这个除以零的错误。我目前面临的挑战来自

下面是我正在使用的代码,我正在插入到年底的报告中:

SELECT CAST(ROUND((.01 * 2541) / Count(date_record_entered), 1) AS decimal(5,1)) 
FROM dbo.tablename
WHERE date_record_entered IS NOT NULL 
and date_record_entered >= 20131201 
AND date_record_entered <= 20131231
以下是我尝试过但没有成功的方法

样本1

SELECT CASE WHEN date_record_entered = 0 then null
ELSE CAST(ROUND(.01 * 2541 / COUNT(date_record_entered), 
AS deciamal (5,1)
FROM dbo.tablename 
WHERE date_record_entered IS NOT NULL 
AND date_record_entered >= 20140201 
and date_record_entered <= 20140228
样本2

SELECT CAST(ROUND((.01 * 2541) / NULLIF(Count(date_record_entered), 1) 
AS decimal(5,1))) 
FROM dbo.tablename 
WHERE date_record_entered IS NOT NULL 
and date_record_entered >= 20140201 
AND date_record_entered <= 20140228
样本3

SET ARITHABORT OFF
SET ANSI_WARNINGS OFF

SELECT CAST(ROUND(.01 * 2541 / COUNT(date_record_entered ), 1) AS decimal(5,1)) 
FROM dbo.tablename  
WHERE date_record_entered IS NOT NULL 
AND date_record_entered >= 20140201 
and date_record_entered  <= 20140228
现在,第三个在SQL中工作,但我还没有找到一种使用gridview/c实现这一点的方法


我知道这可能很简单,但我只是在这一点上旋转我的轮子

第二次解决方案尝试不应该是


选择COUNTdate_record_entered=0时的大小写,然后选择null ELSE CASTROUND.01*2541/COUNTdate_record_entered,作为小数点5,1结束于dbo.tablename,其中date_record_entered不为null,date_record_entered>=140201,date_record_entered示例2有:NULLIFCountdate_record_entered,1

相反,请尝试:NULLIFCountdate\u record\u entered,0

NULLIF将返回第一个参数中的值,除非它等于第二个参数中的值。如果它们相等,则NULL返回NULL

SELECT CAST(ROUND((.01 * 2541) / NULLIF(Count(date_record_entered), 1), 0) AS decimal(5,1))
FROM dbo.tablename 
WHERE date_record_entered IS NOT NULL 
and date_record_entered >= 20140201 
AND date_record_entered <= 20140228
使用NULLIF有效,因为除以NULL返回NULL:


通常可以避免抑制警告。输入的日期\u记录\u不能同时为空且介于两个日期之间,因此我删除了WHERE条件的这部分。

一些回车符会使代码更易于阅读。在末尾添加一个输入了>0的计数日期\u记录如何?既然您似乎是在检查输入的日期=0,但除以输入的计数日期,为什么输入的日期总是0?如果该字段是数据库中的日期字段,那么我认为这是不可能的,它要么是日期,要么是空的。如果是这样的话,我会在你的case语句中检查它是否为null。你所有的样本都有语法错误。@drewlander由于WHERE条件,输入的日期记录计数可能为0。这就是我的意思。感谢您让它更清楚。这会在关键字“FROM”附近返回不正确的语法错误。如果计数为1,则NULLIF函数将返回null。我认为,如果计数为0,则需要将其更改为返回null,这将导致被零除的错误。@GMastros啊,谢谢,已经翻转了该轮和null,这意味着要将该轮全部删除。已更新。我插入了该选项,并在关键字“AS”附近得到一个“不正确的语法”。我只是建议您将1更改为0。我假设您的查询在语法上已经是正确的。无论如何,我已经用完整的查询更新了我的答案。
SELECT CAST(ROUND((.01 * 2541) / NULLIF(Count(date_record_entered), 1), 0) AS decimal(5,1))
FROM dbo.tablename 
WHERE date_record_entered IS NOT NULL 
and date_record_entered >= 20140201 
AND date_record_entered <= 20140228
SELECT CAST((.01 * 2541) / NULLIF(COUNT(date_record_entered), 0) AS DECIMAL(5,1)) 
FROM dbo.tablename
WHERE date_record_entered >= 20131201 
  AND date_record_entered <= 20131231
SELECT CASE WHEN COUNT(date_record_entered) = 0 THEN NULL
            ELSE CAST((.01 * 2541) / COUNT(date_record_entered) AS DECIMAL(5,1))
       END
FROM dbo.tablename 
WHERE date_record_entered >= 20140201 
  AND date_record_entered <= 20140228