Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
Sql 运行以下查询时出现“被零除错误”错误_Sql_Sql Server_Tsql_Casting_Common Table Expression - Fatal编程技术网

Sql 运行以下查询时出现“被零除错误”错误

Sql 运行以下查询时出现“被零除错误”错误,sql,sql-server,tsql,casting,common-table-expression,Sql,Sql Server,Tsql,Casting,Common Table Expression,我无法确定错误,因为我正在尝试运行此查询。它给了我除以零的误差。此错误发生在第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

我无法确定错误,因为我正在尝试运行此查询。它给了我除以零的误差。此错误发生在第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

只有一个商可能失败-查询中有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

只有一个商可能失败-查询中有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

据我所知,只有一个分母可以是零。其他的似乎是一个常数4

一种简单的捕捉可怕的被零除的技术是NullIf

例如,如果分母=0,则返回NULL

因此,在你的情况下:

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

据我所知,只有一个分母可以是零。其他的似乎是一个常数4

一种简单的捕捉可怕的被零除的技术是NullIf

例如,如果分母=0,则返回NULL

因此,在你的情况下:

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

请不要使用不适用于您的问题的标签。如果没有实际数据,这是不可能回答的。但是,你会遇到很多分歧,所以这就是问题所在。尝试做一个案例陈述,如果分母为0,则输出为空。请不要使用不适用于您的问题的标记。如果没有实际数据,这是不可能回答的。但是,你会遇到很多分歧,所以这就是问题所在。尝试制作一个CASE语句,其中如果分母为0,则输出为空。这给了我以下错误:Msg 102,级别15,状态1,第30行“temp2”附近的语法不正确。@SankW-抱歉,还有一个编辑错误。。。底部有几行被切掉了。这给了我以下错误:Msg 102,级别15,状态1,第30行“temp2”附近的语法不正确。@SankW-对不起,还有一个编辑。。。底部有几行字被砍掉了。@SankW高兴吗helped@SankW很高兴它有帮助