私は現在、与えられた基準に基づいてコールセンターをランク付けするこのコードを与えられました。私はこのランキングをセンターベースからアソシエイトディレクター(別名AD、マネージャー、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)
ADをミックスに追加しようとすると、select句がinsert句と一致しないというエラーが発生し続けます。ADを含めるために変更が必要な領域を誰かが指摘できますか?
編集:AD列を正常に追加できました!新しい問題:結果は少しずれています。結果が場所に基づいてランク付けされる前は、それぞれの個別の場所に合計ポイントに基づいてランクが割り当てられていました。それはきれいで、数字が足し合わされました。現在、重複するADがあり、ランキングは逆になっています(ランキングポイントの合計の最小量が1位としてリストされています)。
AD列をINSERTステートメントとselectステートメントに追加しただけです。クエリの適切な場所全体にAD列を追加することに加えて、特定の日付範囲の実際のランキングを反映するようにクエリの操作または関数のいずれかを変更する必要があることを誰かに教えてもらえますか?この点については、お気軽にご説明ください。あなたが提供できるどんな援助にも前もって感謝します。