Точно так же вы знаете, что количество (seqnum) в качестве ответа не является правильным определением для ответа на входящие вызовы Aspect UIP.Если вы отметите поле, помеченное SwitchDispId, в нем может быть 1 или 2, что будет означать отказ от вызова.Следовательно, не отвеченный звонок.Я вижу, что вы используете user_id не нуль для получения отвеченных звонков, но я просто хотел, чтобы вы знали об этом.
Также вы можете присоединить таблицу acdcalldetail к служебной таблице, чтобы получить имена, которые больше похожи на то, чтобизнес привык видеть так:
SELECT
Service_c
,SUM(CASE WHEN acd.SwitchDispID IN (1,2) THEN 1 ELSE 0 END as Abandons
,SUM(CASE WHEN acd.user_id is not null THEN 1 ELSE 0 END as Answered
FROM acdcalldetail acd
JOIN service s
ON s.service_id = acd.service_id
AND s.sourceid = acd.sourceid
WHERE acd.CallStartDt between '20170501' AND '20170530'
AND s.Service_id NOT IN (37,39,47,51,57,58,96,215,374,375)
GROUP BY
s.Service_c
"select datepart (hh, callstartdt) as Hour, " _
& " count(seqnum) as Anaswered," _
& " sum(case when user_id <> NULL then 1 else 0 end) as answered_calls ," _
& " sum(case when user_id <> NULL and datediff (ss, callstartdt, QueueEndDt) <= 20 then 1 else 0 end) , " _
& " sum(case when user_id = NULL then 1 else 0 end), " _
& " sum(case when user_id <> NULL and datediff (ss, callstartdt, QueueEndDt) <= 20 then 1 else 0 end) / count(seqnum), " _
& " sum(Case when user_id <> NULL then 1 else 0 end ) / count(seqnum) from acdcalldetail " _
& " where callstartdt between '" & fromDt & "' and '" & toDt & "' " _
& " and service_id not in (37,39,47,51,57,58,96,215,374,375) " _
& " group by datepart (hh, callstartdt) " _
& " order by datepart (hh, callstartdt)"