2017-04-10 77 views
0

我不確定錯誤,因爲我試圖運行此查詢。它給我零分錯誤。此錯誤發生在第1行。運行以下查詢時出現「遇到零分錯誤」錯誤

Msg 8134, Level 16, State 1, Line 1 
Divide by zero error encountered. 

任何人都可以請幫忙嗎?

SELECT temp1.*,90 as Plan_val,max(cast(Round(temp2.actual,0) as int)) as actual_val FROM(
SELECT t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id FROM (
SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)],[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id 
FROM TEMP_TICKET_STATE 

UNION 

SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)],[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id 
FROM TEMP_TICKET_STATE 
where [Problem_Type_Name(Parent)]='Incident (Technical Issues)' and PRIORITY_TYPE_NAME in ('High') AND (ISNULL([Escalated to Closed time],0) <= 120 or ISNULL([Escalated to Resolved time],0) <=120)) t 

group by t.[Problem_Type_Name(Parent)] ,t.[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id) temp1 

INNER JOIN 

(
SELECT t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)],0 AS plan_val, cast(Round((cast(sum(t.Total_tickets) as decimal(38,2))- cast(sum(t.Alarm_Val) as decimal(38,2)))/cast(sum(t.Total_tickets) as decimal(38,2))*100,0) as int) as actual FROM (
SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)],0 as Alarm_Val, cast (count(distinct [Job_ticket_id])/4 as int) as Total_tickets 
FROM TEMP_TICKET_STATE_month 
group by [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)] 

UNION 

SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)],cast (count(distinct [Job_ticket_id])/4 as int) as Alarm_Val, 0 as Total_tickets 
FROM TEMP_TICKET_STATE_month 
where [Problem_Type_Name(Parent)]='Incident (Technical Issues)' and PRIORITY_TYPE_NAME in ('High') AND (ISNULL([Escalated to Closed time],0) <= 120 or ISNULL([Escalated to Resolved time],0) <=120) 
group by [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)]) t 

group by t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)]) temp2 

ON temp1.[Problem_Type_Name(Parent)]=temp2.[Problem_Type_Name(Parent)] 
Group by temp1.[Assigned Tech],temp1.Close_Date,temp1.Job_ticket_id,temp1.NAME,temp1.[Problem_Type_Name(Parent)],temp1.[Problem_Type_Name(Child)] ,temp1.Report_Date 

GO 
+0

請不要使用不適用於您的問題 –

+0

標籤這是不可能沒有回答實際數據。但是,您發生的部門數量很多,所以這就是問題發生的地方。試着做一個CASE語句,如果分母是0,那麼輸出NULL –

回答

1

這裏只有一個商可以失敗 - 有查詢3個師,2除以常數。試試這個:

SELECT temp1.*,90 as Plan_val,max(cast(Round(temp2.actual,0) as int)) as actual_val FROM(
SELECT t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id FROM (
SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)],[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id 
FROM TEMP_TICKET_STATE 

UNION 

SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)],[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id 
FROM TEMP_TICKET_STATE 
where [Problem_Type_Name(Parent)]='Incident (Technical Issues)' and PRIORITY_TYPE_NAME in ('High') AND (ISNULL([Escalated to Closed time],0) <= 120 or ISNULL([Escalated to Resolved time],0) <=120)) t 

group by t.[Problem_Type_Name(Parent)] ,t.[Problem_Type_Name(Child)] , REPORT_DATE, CLOSE_DATE,[Assigned Tech],NAME , Job_ticket_id) temp1 

INNER JOIN 

(
SELECT t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)],0 AS plan_val, 
    -- CHANGE IS THE CASE ON THE NEXT LINE! 
    case when sum(t.Total_tickets) = 0 then null else cast(Round((cast(sum(t.Total_tickets) as decimal(38,2))- cast(sum(t.Alarm_Val) as decimal(38,2)))/cast(sum(t.Total_tickets) as decimal(38,2))*100,0) as int) end as actual FROM (
SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)],0 as Alarm_Val, cast (count(distinct [Job_ticket_id])/4 as int) as Total_tickets 
FROM TEMP_TICKET_STATE_month 
group by [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)] 

UNION 

SELECT 'NOC Incident Resolution - High' as [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)],cast (count(distinct [Job_ticket_id])/4 as int) as Alarm_Val, 0 as Total_tickets 
FROM TEMP_TICKET_STATE_month 
where [Problem_Type_Name(Parent)]='Incident (Technical Issues)' and PRIORITY_TYPE_NAME in ('High') AND (ISNULL([Escalated to Closed time],0) <= 120 or ISNULL([Escalated to Resolved time],0) <=120) 
group by [Problem_Type_Name(Parent)] ,[Problem_Type_Name(Child)]) t 

group by t.[Problem_Type_Name(Parent)],t.[Problem_Type_Name(Child)]) temp2 

ON temp1.[Problem_Type_Name(Parent)]=temp2.[Problem_Type_Name(Parent)] 
Group by temp1.[Assigned Tech],temp1.Close_Date,temp1.Job_ticket_id,temp1.NAME,temp1.[Problem_Type_Name(Parent)],temp1.[Problem_Type_Name(Child)] ,temp1.Report_Date 

GO 
+0

這給了我以下錯誤:Msg 102,Level 15,State 1,Line 30 'temp2'附近的語法不正確。 – Kirk1993

+0

@SankW - 對不起,還有一個編輯還在......幾條線從底部切下。 –

+0

謝謝Max。這工作。 – Kirk1993

2

據我所知,唯一的分母可能是零。其他似乎是用於捕集可怕被零除恆定4.

一種簡單的技術是NULLIF()

例如NullIf(<any denominator>,0)這將返回NULL,如果分母= 0,你的情況

所以:

NullIf(cast(sum(t.Total_tickets) as decimal(38,2)),0) 
+0

謝謝@JohnCappelletti這個作品也是 – Kirk1993

+0

@SankW很高興幫助 –