【发布时间】:2017-08-18 12:42:00
【问题描述】:
我正在制定业务规则,以确定每 30 分钟间隔活跃的呼叫中心代理的数量。
我们有两种类型的代理:计费和技术运营。
我们最近让计费代理接听技术电话,反之亦然。
我编写了以下代码,它返回每个代理、每个间隔和每个呼叫类型的呼叫计数:
SELECT
HAGENT.[ROW_DATE],
CASE
WHEN LEN([STARTTIME]) = 1 THEN '00:00'
WHEN LEN([STARTTIME]) = 2 THEN '00:30'
WHEN LEN([STARTTIME]) = 3 THEN (LEFT([STARTTIME],1) + ':' + RIGHT([STARTTIME],2))
WHEN LEN([STARTTIME]) = 4 THEN (LEFT([STARTTIME],2) + ':' + RIGHT([STARTTIME],2))
END AS THETIME,
([LOGID]) AS AGENTS,
COUNT(HAGENT.ACDCALLS) AS CALL_COUNT,
CASE
WHEN SPLITMATRIX.[Business_Unit] LIKE '%Billing%' THEN 'CDN Billing'
WHEN SPLITMATRIX.[Business_Unit] LIKE '%TechOps%' THEN 'CDN Tech Ops'
END AS Bunit
FROM
[KPI_DATA].[dbo].[DM_CMS_HAGENT] HAGENT
LEFT JOIN
[GEMDB].[dbo].[T_PRD_REF_xAGENT_AGENTLIST] AGENTLIST
ON AGENTLIST.asp_raw_cmsID1 = HAGENT.LOGID COLLATE DATABASE_DEFAULT
AND HAGENT.ROW_DATE BETWEEN AGENTLIST.[asp_raw_START_SDEPT] AND AGENTLIST.asp_raw_STOP_SDEPT
AND HAGENT.ROW_DATE BETWEEN AGENTLIST.[asp_raw_START_TEAM] AND AGENTLIST.[asp_raw_STOP_TEAM]
LEFT JOIN
[MATRIX_DATA].[dbo].[REF_CMS_SPLIT_MATRIX] SPLITMATRIX
ON SPLITMATRIX.SPLIT = HAGENT.SPLIT
WHERE
ROW_DATE >= '2017-07-01'
AND [ACDCALLS] != 0
AND (SPLITMATRIX.[Business_Unit] LIKE '%Billing%'
OR SPLITMATRIX.[Business_Unit] LIKE '%TechOps%')
GROUP BY
GROUPING SETS (
(ROW_DATE, STARTTIME,([LOGID]), SPLITMATRIX.[Business_Unit]),
(ROW_DATE, STARTTIME,([LOGID]))
)
ORDER BY
ROW_DATE DESC, THETIME DESC, [LOGID] DESC
输出如下所示:
由于 AGENTS 是代理的唯一 logid,Bunit 是所接电话的类型(当 Bunit 为 NULL 时,它是该时间间隔内代理所接电话的总数)。
从这个输出中,我想计算每个间隔和呼叫类型的活跃员工数。
例如,如果代理接听了 2 个计费电话和 1 个技术运营电话,我会认为该代理的 2/3 是计费代理,而该代理的 1/3 是技术运营代理。
最后,我想对每个呼叫类型、每个间隔的座席比率的总和进行分组。
我尝试使用 PIVOT 函数,但没有成功。
我的预期结果是这样的:
https://i.stack.imgur.com/oKiUl.jpg
有什么帮助吗?
【问题讨论】:
-
你能告诉我们你的预期结果吗?
-
嗨,我的预期结果是这样的:i.stack.imgur.com/oKiUl.jpg 这基本上是我们的活跃代理根据他们接听的呼叫类型的数量而按比例分配的。
-
一些样本数据怎么样?
标签: sql sql-server