Мне дали этот код, который в настоящее время ранжирует колл-центры на основе заданных критериев. Мне было поручено изменить этот рейтинг с Центра на Ассоциированного директора (AKA AD, Manager, BottomUpLevel02).
Проблема в том, что у меня нет большого опыта работы с созданием таблиц. Я обычно манипулирую представлениями, поэтому я уверен, что есть некоторые правила синтаксиса, которых мне здесь серьезно не хватает.
Вот код:
SET NOCOUNT ON
DECLARE @StartDate SMALLDATETIME,
@EndDate SMALLDATETIME
SET @StartDate = '2012/07/01'
SET @EndDate = '2012/07/31'
IF OBJECT_ID('tempdb..#ACSResults') IS NOT NULL DROP TABLE #ACSResults
CREATE TABLE #ACSResults (AreaID VARCHAR(4), Location VARCHAR(50),
MonthName VARCHAR(6),
RepResolve FLOAT, ERP FLOAT)
INSERT INTO #ACSResults
SELECT a.area, a.location,
a.monthname,
CASE WHEN SUM(CASE WHEN a.RepResolve IN ('1','0')
THEN 1
ELSE 0 END) = 0
THEN NULL
ELSE CAST(SUM(CASE WHEN a.RepResolve = '1'
THEN 1
ELSE 0 END)AS FLOAT) / CAST(SUM(CASE WHEN a.RepResolve IN ('1','0')
THEN 1
ELSE 0 END) AS FLOAT) END AS REPRESOLVE,
CASE WHEN SUM(CASE WHEN a.ERP IN ('0','1','2','3','4','5','6','7','8', '9', '10')
THEN 1
ELSE 0 END) = 0
THEN NULL
ELSE (CAST(SUM(CASE WHEN a.ERP IN ('8', '9', '10')
THEN 1
ELSE 0 END) AS FLOAT) / CAST(SUM(CASE WHEN a.ERP in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10')
THEN 1
ELSE 0 END) AS FLOAT))END AS ERP
FROM (SELECT CASE WHEN vl.virtuallocationtypeid =13
THEN 'PP'
WHEN eh.PeopleSoftDepartmentID IN ('2922', '9050', '9136', '9130','9134','9135', '9137', '9060')
THEN 'FS'
WHEN eh.PeopleSoftDepartmentID ='2390'
THEN 'CMO'
WHEN eh.virtuallocationtypeid = 3
OR eh.peoplesoftDepartmentid IN ('9165', '9166','9157','9167','<<OSVBSC>>')
THEN 'BSC'
WHEN (eh.virtuallocationid IN ('111', '113', '114', '115', '116', '118', '119', '120', '122', '123')
AND acs.OfferDate < '04/01/2011')
OR (eh.virtuallocationid IN ('116','120','123')
AND acs.OfferDate >= '04/01/2011')
THEN 'SPC2'
WHEN (eh.virtuallocationid IN ('112', '121', '110')
AND acs.OfferDate >= '07/01/2011')
THEN 'SPC2'
WHEN (eh.virtuallocationid IN ('99')
AND acs.OfferDate < '07/01/2011')
AND eh.PeopleSoftDepartmentID IN ('9030', '9080', '9355', '9040', '<<OSCCALTECH>>', '<<WDTSMO>>', '9195','<<OSVTS>>')
THEN 'SPC2'
WHEN eh.EmployeeTypeID = 'V'
THEN 'SPC'
WHEN vl.virtuallocationtypeid =14
THEN 'SPC2'
WHEN (eh.virtuallocationID IS NULL
AND eh.AreaId IS NULL)
THEN eh.PeopleSoftAreaID
WHEN eh.virtuallocationID IS NULL
THEN eh.AreaID
ELSE vl.AreaId END AS Area,
CASE WHEN eh.VirtualLocationID = 102
THEN 'HQ Quality - GSC'
WHEN eh.peoplesoftDepartmentid IN ('9165', '9166','9167')
THEN 'GSC'
WHEN eh.peoplesoftdepartmentid ='<<OSVAOL>>'
AND eh.virtuallocationid =64
THEN 'ALORICA AOL'
WHEN (eh.virtuallocationid IN ('99', '148')
AND eh.PeopleSoftDepartmentID IN ('9030', '9080', '9355', '9040', '<<OSCCALTECH>>', '<<WDTSMO>>', '9195','<<OSVTS>>'))
THEN 'Wichita Falls (WDS) - Tech'
WHEN eh.virtuallocationID IS NULL
OR vl.VirtualLocationTypeID = 4
THEN 'Others'
ELSE vl.VirtualLocationDescription END AS Location,
CASE WHEN eh.PeopleSoftDepartmentID IN ( '9180', '<<WEBILING>>','<<OSVSPN>>')
THEN 'Bilingual'
WHEN eh.PeopleSoftDepartmentID IN ( '9150', '9440', '9370', '9260', '9330', '9460','9155','9215','9157','9175','<<OSVBSC>>')
THEN 'BSC'
WHEN eh.PeopleSoftDepartmentID IN ( '9395', '9010', '9341', '9340', '9450', '9131', '9025', '10014901', '<<SO_WEVIS>>', '<<WE_MWVIS>>', '<<WEVIS>>', '<<NEVIS>>', '<<OSCCALTEL>>', '<<SOVIS>>', '<<NE_MWVIS>>', '<<MWVIS>>', '<<OSVCS>>')
THEN 'Care'
WHEN eh.PeopleSoftDepartmentID IN ('9030', '9080', '9355', '9040', '<<OSCCALTECH>>', '<<WDTSMO>>', '9195','<<OSVTS>>' )
THEN 'Tech'
WHEN eh.PeopleSoftDepartmentID IN ('<<AOL_WEVIS>>', '<<OSVAOL>>')
THEN 'AOL'
WHEN eh.peoplesoftdepartmentid IN ('<<OSVCS_TCS>>', '<<OSVOB_TCS>>')
THEN 'New Hire Transition'
WHEN eh.PeopleSoftDepartmentID = '9390'
THEN 'EPP'
WHEN eh.PeopleSoftDepartmentID = '9120'
THEN 'ERT'
WHEN eh.PeopleSoftDepartmentID = '9190'
THEN 'IRT'
WHEN eh.PeopleSoftDepartmentID = '9085'
THEN 'Bilingual Tech'
WHEN eh.PeopleSoftDepartmentID IN ('9490', '<<LNP>>','<<OSVLNP>>')
THEN 'LNP'
WHEN eh.PeopleSoftDepartmentID = '9070'
THEN 'Retention'
WHEN eh.PeopleSoftDepartmentID = '9115'
THEN 'GLOBAL'
WHEN eh.PeopleSoftDepartmentID IN ('<<ONEBILL>>', '<<OSVOB>>')
THEN 'Onebill'
WHEN eh.peoplesoftdepartmentid = '<<PPCARE>>'
THEN 'Prepaid Care'
WHEN eh.peoplesoftdepartmentid = '<<PPTECH>>'
THEN 'Prepaid Tech'
ELSE 'Other' END AS DeptGroup,
psd.PeopleSoftDepartmentDescription AS Dept,
acs.IVRCallID,
acs.OfferDate,
acs.EmployeeID,
acs.ACSSUserID,
Cast(acs.DidRepResolve as Float) As RepResolve,
acs.Question1 AS FCR,
acs.Question2 AS ERP,
acs.Question3 AS NPS,
acs.ACSSCallID,
month (acs.Offerdate) AS MonthName
FROM dbCustomerSurvey.Detail.vwAfterCallSurvey acs
LEFT JOIN dbEmployee.Summary.vwEmployeeHistory eh
ON acs.EmployeeID = eh.EmployeeID
AND acs.OfferDate BETWEEN eh.StartDate
AND eh.EndDate
LEFT JOIN dbEmployee.Config.vwName Rep
ON eh.EmployeeID = Rep.EmployeeID
LEFT JOIN dbEmployee.Config.vwName Sup
ON eh.BottomUp01ID = Sup.EmployeeID
LEFT JOIN dbEmployee.Config.vwName Mgr
ON eh.BottomUp02ID = Mgr.EmployeeID
LEFT JOIN dbEmployee.Config.vwName Dir
ON eh.BottomUp03ID = Dir.EmployeeID
LEFT JOIN dbEmployee.Config.vwVirtualLocation vl
ON eh.VirtualLocationID = vl.VirtualLocationID
LEFT JOIN dbEmployee.Config.vwDepartment d
ON eh.DepartmentID = d.DepartmentID
LEFT JOIN dbEmployee.Config.vwPeopleSoftDepartment psd
ON eh.PeopleSoftDepartmentID = psd.PeopleSoftDepartmentID
WHERE acs.CurrentStatus IN ('Completed', 'COMP')
AND acs.surveytype IN ('ACS_FCR_Rep_Perform', 'ACS_FCR_Rep_Perform-prepaid', 'ACS_Rep_Perform_BSC2', 'ACS_Rep_Perform_Gov')
AND acs.OfferDate BETWEEN @StartDate AND @EndDate) a
WHERE a.Area IN ('WE', 'mw','ne','so')
AND a.Location NOT IN ('West Area Staff - CS', 'Northeast Area Staff - CS', 'Midwest Area Staff - CS', 'Others', 'West Area Finance - CS', 'Midwest Area Marketing, Sales, & Training', 'South Area Staff - CS', 'Midwest Area Finance - CS', 'Bellevue - CS')
AND a.deptgroup in ('aol','bilingual','Bilingual Tech','care','global','lnp', 'onebill','other','retention','tech', 'new hire transition')
GROUP BY a.area, a.location, a.monthname
-- Повторить таблицу
IF OBJECT_ID('tempdb..#HRRep') IS NOT NULL DROP TABLE #HRRep
CREATE TABLE #HRRep (AreaID VARCHAR(4), Location VARCHAR(50),
MonthName VARCHAR(6),
HourRepeatPercent FLOAT)
INSERT INTO #HRRep (AreaID, Location, MonthName, HourRepeatPercent)
SELECT eh.AreaID, vl.VirtualLocationDescription,
MONTH (acs.statdate) AS MonthName,
CAST(SUM(acs.Repeats2Hr)as FLOAT) / NULLIF(SUM(acs.Calls2Hr), 0) as 'HourRepeatPercent'
FROM dbReportSummary.ReportSummary.vwRepeatCalls2Hr acs WITH (NOLOCK)
LEFT JOIN dbEmployee.Summary.vwEmployeeHistory eh WITH (NoLOCK)
ON acs.EmployeeID = eh.EmployeeID
AND acs.StatDate BETWEEN eh.StartDate AND eh.EndDate
LEFT JOIN dbEmployee.Config.vwVirtualLocation vl
ON eh.VirtualLocationID = vl.VirtualLocationID
LEFT JOIN dbEmployee.Config.vwDepartment d
ON eh.DepartmentID = d.DepartmentID
LEFT JOIN dbEmployee.Config.vwPeopleSoftDepartment psd
ON eh.PeopleSoftDepartmentID = psd.PeopleSoftDepartmentID
WHERE acs.StatDate BETWEEN @StartDate AND @EndDate
AND eh.PeopleSoftDepartmentID IN ('9180', '<<WEBILING>>','<<OSVSPN>>', '9150', '9440', '9370', '9260', '9330', '9460','9155','9215','9157','9175','<<OSVBSC>>', '9395', '9010', '9341', '9340', '9450', '9131', '9025', '10014901', '<<SO_WEVIS>>', '<<WE_MWVIS>>', '<<WEVIS>>', '<<NEVIS>>', '<<OSCCALTEL>>', '<<SOVIS>>', '<<NE_MWVIS>>', '<<MWVIS>>', '<<OSVCS>>', '9030', '9080', '9355', '9040', '<<OSCCALTECH>>', '<<WDTSMO>>', '9195','<<OSVTS>>', '<<AOL_WEVIS>>', '<<OSVAOL>>', '<<OSVCS_TCS>>', '<<OSVOB_TCS>>' , '9390', '9120', '9190', '9085', '9490', '<<LNP>>', '<<OSVLNP>>', '9070', '9115', '<<ONEBILL>>', '<<OSVOB>>', '<<PPCARE>>', '<<PPTECH>>')
AND eh.AreaID IN ('MW', 'NE', 'SO', 'WE')
AND vl.VirtualLocationDescription NOT IN ('West Area Staff - CS', 'Northeast Area Staff - CS', 'Midwest Area Staff - CS', 'Others', 'West Area Finance - CS')
AND eh.Titleid IN ('1','2','3','509')
GROUPBY eh.AreaID, vl.VirtualLocationDescription, MONTH (acs.statdate)
-- (?) --
SELECT a.Location, a.RepResolve, a.RRRank, a.ERP, a.ERPRank,a.HourRepeatPercent,
a.RepeatRank, (a.RRRank + a.ERPRank+a.RepeatRank) as 'Total Rank Points',
RANK() OVER(ORDER BY (a.RRRank + a.ERPRank+a.RepeatRank) ASC, a.RepResolve DESC) AS 'Overall Rank'
FROM (SELECT a.Location, a.RepResolve,
RANK() OVER(ORDER BY a.RepResolve DESC) AS RRRank, a.ERP,
RANK() OVER(ORDER BY a.ERP DESC) AS ERPRank, b.HourRepeatPercent,
RANK() OVER(ORDER BY b.HourRepeatPercent ASC) AS RepeatRank
FROM #ACSResults AS A
LEFT JOIN #HRRep AS B
ON a.areaid = b.areaid
AND a.monthname = b.monthname
AND a.location = b.location) a
GROUP BY a.Location, a.RepResolve, a.RRRank, a.ERP, a.ERPRank,a.HourRepeatPercent,
a.RepeatRank, (a.RRRank + a.ERPRank + a.RepeatRank)
Я продолжаю получать ошибки о том, что предложение select не соответствует предложению вставки, когда я пытаюсь добавить AD в микс. Кто-нибудь может указать области, которые необходимо изменить, чтобы включить AD?
РЕДАКТИРОВАТЬ: мне удалось успешно добавить столбец AD! Новая проблема: результаты немного не те. Раньше, когда результаты ранжировались в зависимости от местоположения, каждому отдельному местоположению присваивался рейтинг на основе общего количества баллов. Это было чисто, и цифры складывались. Теперь есть дублирующиеся объявления, и ранжирование обратное (наименьшее количество общих рейтинговых очков указано как 1-е место).
Я просто добавил столбец AD в оператор INSERT и операторы select. Может ли кто-нибудь сказать мне, помимо добавления столбца AD в соответствующие места запроса, должен ли я изменять какие-либо операции или функции запроса, чтобы отразить истинный рейтинг для данного диапазона дат? Пожалуйста, не стесняйтесь просить разъяснений по любой части этого. Заранее благодарим за любую помощь, которую вы можете предоставить.
CREATE TABLE FROM SELECT
, будут брать имена и определения столбцов из выбранных столбцов, поэтому вам не нужно явно перечислять их. Очевидно, что такие вещи, как первичные ключи (и, как правило, ограничения) не могут быть переданы, но это упрощает определение таблицы. - person Clockwork-Muse   schedule 15.11.2012CASE WHEN <somenumber> THEN <some string title>
), даже если бы это добавило соединение. На самом деле я не уверен, что все правильно освещено, это довольно неприятно. Также, вероятно, могут быть полезны какие-то контрольные таблицы (например, «включить все отделы в эту таблицу»). И, как всегда, диапазоны дат следует искать с эксклюзивными верхними границами (<
), не операторомBETWEEN
, особенно на сервере SQL. - person Clockwork-Muse   schedule 15.11.2012