簡體   English   中英

運行以下查詢時出現“遇到零除錯誤”錯誤

[英]Getting “Divide by zero error encountered” error while running the below query

我不確定該錯誤,因為我正在嘗試運行此查詢。 它給了我除以零的誤差。 此錯誤發生在第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

據我所知,只有一個分母可能為零。 其他的似乎是常數4。

捕獲可怕的被零除的一種簡單技術是NullIf()

例如NullIf(<any denominator>,0)如果分母= 0,則將返回NULL。

因此,在您的情況下:

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

只有一個商會失敗-查詢中有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM