我需要在包含NoOfErrors
和NoOfAudited
列的表格中的SQL server数据库表中计算和检索数据。
我需要根据这些列计算准确度。
我有这样的查询
select
a.id,
(100-((a.NoOfErrors*100)/ NULLIF(a.NoOfAudited,0))) as Accuracy
from Table1 a
join Table2 pd
on a.batchid=pd.id
where
a.charge='"+Poster+"' and status=1
仅当NoOfErrors
和NoOfAudited
列包含某些值时,才会执行上述查询。
我拥有所有值,但如果NoOfErrors
和NoOfAudited
列中的任何一个值包含Null
值,则它不会检索任何数据,并显示{ {1}}。
ResultSet数据不接受空值
如何通过在jsp表中将null替换为空来使查询接受空值并检索数据?
答案 0 :(得分:0)
此行存在问题,应予以纠正。
(100-((a.NoOfErrors*100)/ NULLIF(a.NoOfAudited,0))) as Accuracy
问题#1 :
NULLIF(a.NoOfAudited,0)
如果NoOfAudited
为NULL
,则表达式将返回0
;基本上你除以零。这应该替换为1
,如下所示
NULLIF(a.NoOfAudited,1)
问题#2
不检查 NoOfErrors 列的NULL值。
在SQL Server中,大多数NULL算术结果为NULL
。
例如,以下所有查询都会产生NULL
select 100-NULL*100/0
select NULL*100
select NULL/0
select 100-NULL
因此,只要NULL
为Accuracy
NoOfErrors
获得NULL
值 (100-((COALESCE(a.NoOfErrors,0)*100)/ COALESCE(a.NoOfAudited,1))) as Accuracy
要更正此部分,您应该编写类似
的查询表达式NULLIF
请注意,我已将COALESCE
替换为符合ANSI的select
a.id,
case
when COALESCE(a.NoOfErrors,a.NoOfAudited,'') =''
then''
else
CAST((100-((COALESCE(a.NoOfErrors,0)*100)/ COALESCE(a.NoOfAudited,1))) as VARCHAR(10))as Accuracy
end
from Table1 a
join Table2 pd
on a.batchid=pd.id
where
a.charge='"+Poster+"' and status=1
,并且将在SQL服务器和MySQL上运行
<强> TLDR; 强>
您的查询应该像
messaging.onMessage()