2010-07-13 2 views
0

Я использую следующий синтаксис:Easy SQL Деление на ноль происходит, когда синтаксис кажется правильным

Case 
    When acdtime != 0 Then sum(CAST(ti_stafftime as DECIMAL)/acdtime)*100 
    Else '0' 
End as MyPercent, 

Но я все еще получаю эту ошибку:

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

Что я делаю неправильно здесь?

Мой весь запрос ниже:

Select 
logid, 
row_date, 
sum(acdcalls) as 'total calls', 
sum(ti_stafftime) as 'total time staffed', 
sum(acdtime) as 'time on the phone', 
Case 
When acdtime != 0 Then sum(CAST(ti_stafftime as DECIMAL)/acdtime)*100 
When acdtime = 0 Then '0' 
Else '0' 
End as MyPercent, 
RepLName+', '+RepFName AS Agent, 
SupLName+', '+SupFName AS Sup, 
MgrLName+', '+MgrFName AS Manager 

From CMS_ECH.dbo.dagent dagent 
INNER JOIN InfoQuest.dbo.IQ_Employee_Profiles_v3_AvayaId q on dagent.logid = q.AvayaID 

Where row_date between getdate()-90 and getdate()-1 
    And row_date between RepToSup_StartDate and RepToSup_EndDate 
    And row_date between SupToMgr_StartDate and SupToMgr_EndDate 
    And row_date between Avaya_StartDate and Avaya_EndDate 
    And row_date between RepQueue_StartDate and RepQueue_EndDate 
    And Queue IN ('Pre-Call','Quota','Field Traffic Control','Same Day') 
Group By 
Queue, 
MgrLName+', '+MgrFName, 
SupLName+', '+SupFName, 
RepLName+', '+RepFName, 
logid, 
row_date, 
acdtime 
+0

Я также попытался acdtime> 0 и Я все равно получаю ту же ошибку – CodingIsAwesome

+0

Вы уверены, что ошибка исходит оттуда? Каков весь запрос? Знаете ли вы значение acdtime для строки, где возникает ошибка? Какой тип времени? –

+0

Что делать, если acdtime равно null? –

ответ

6

Переместить операцию SUM, и вы будете прекрасно

DECLARE @acdtime decimal 
DECLARE @ti_stafftime int 

SET @ti_stafftime = 5 
SET @acdtime = 0 


select 
SUM(

Case 
    When @acdtime != 0 Then CAST(@ti_stafftime as DECIMAL)/@acdtime 
    Else '0' 
End)* 100 as MyPercent 

Это не удается

select 


Case 
    When @acdtime != 0 Then SUM(CAST(@ti_stafftime as DECIMAL)/@acdtime) * 100 
    Else '0' 
End as MyPercent 
+0

Хороший ответ. Я только что подумал о порядке операций и временных таблицах Я просто пытался найти свою книгу Итзика Бен-Гана, когда заметил, что вы ответили на нее. –

+0

Отлично, я изменил ее так, чтобы выглядеть так: SUM (CASE Когда acdtime! = 0 THEN (CAST (ti_stafftime as DECIMAL)/acdtime) * 100 ELSE '0' END) AS 'MyPercent', Большое вам спасибо! – CodingIsAwesome

 Смежные вопросы

  • Нет связанных вопросов^_^