2017-06-08 61 views
1

我需要從我的表中的SQL服務器數據庫表中計算和檢索數據,其中有NoOfErrorsNoOfAudited列。如何使用servlet和jsp採取空值查詢表達式

我需要根據這些列來計算精度。

我只有當NoOfErrorsNoOfAudited列包含一些值這樣

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 

上面查詢的查詢被執行。

我所有的值,但如果在NoOfErrorsNoOfAudited列的任何一個值包含Null值不獲取任何數據,它顯示了No data found

的ResultSet數據不接受空值

我怎樣才能使查詢接受空值,並通過更換空在JSP表清空檢索數據?

回答

0

此行有問題,應予糾正。

(100-((a.NoOfErrors*100)/ NULLIF(a.NoOfAudited,0))) as Accuracy 

問題#1

NULLIF(a.NoOfAudited,0) 

如果NoOfAuditedNULL則表達式將返回0;基本上你除以零。這應該與1更換像下面

NULLIF(a.NoOfAudited,1) 

問題#2

爲NULL值沒有檢查NoOfErrors列。 在SQL服務器中,大多數NULL算術運算結果爲NULL。 例如下面所有的查詢會產生NULL

select 100-NULL*100/0 
select NULL*100 
select NULL/0 
select 100-NULL 

因此,你會得到NULL價值Accuracy每當NoOfErrorsNULL

要糾正這一部分,你應該寫你的查詢語句,比如

(100-((COALESCE(a.NoOfErrors,0)*100)/ COALESCE(a.NoOfAudited,1))) as Accuracy 

請注意,我把它換成NULLIFCOALESCE這是ANSI標準,都將SQL服務器上運行,並MySQL的

TLDR;

您的查詢應該像

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 
+0

嗨,@DhruvJoshi,你把它很好,但是當'兩列具有空值,則精度顯示100'它沒有顯示正確的準確性,但'消除Null值我需要的時候null值在empty' – Karthik

+0

精度顯示兩列@Karthik更新答案 – DhruvJoshi

+0

@Karthik請接受我的答覆是正確的答案,如果它的工作對你 - 這樣其他用戶可以受益:從知道答案的作品,並通過其標記爲已回答的問題。 – DhruvJoshi