2

私は現在、与えられた基準に基づいてコールセンターをランク付けするこのコードを与えられました。私はこのランキングをセンターベースからアソシエイトディレクター(別名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列を追加することに加えて、特定の日付範囲の実際のランキングを反映するようにクエリの操作または関数のいずれかを変更する必要があることを誰かに教えてもらえますか?この点については、お気軽にご説明ください。あなたが提供できるどんな援助にも前もって感謝します。

4

3 に答える 3

1

クロックワーク ミューズのアイデアに肉付けするため。テーブルの作成が許可されている場合は、最初から始めてください(nvarcharsをデータベースに実際にあるものに置き換えてください)

Create Table dbo.DepartmentGroupLookup (
  PeopleSoftDepartmentID nvarchar(30) Primary Key Not Null,
  DeptGroup nvarchar(30) not null
)

Insert Into dbo.DepartmentGroupLookup (PeopleSoftDepartmentID, DeptGroup) Values
  ('9180', 'Bilingual'), ('<<WEBILING>>', 'Bilingual'), ..., ('9150', 'BSC'), ... etc

Create Function dbo.LookupLocation(
  @VirtualLocationID as int, 
  @VirtualLocationDescription nvarchar(30),
  @VirtualLocationTypeID int,
  @PeopleSoftDepartmentID nvarchar(30)
) Returns nvarchar(30) As
Begin
  Return Case 
    When @VirtualLocationID = 102 Then 'HQ Quality - GSC'
    When @PeopleSoftDepartmentID In ('9165', '9166','9167') Then 'GSC'
    When @PeopleSoftDepartmentID ='<<OSVAOL>>' And @VirtualLocationID = 64 Then 'ALORICA AOL'
    When @VirtualLocationID In ('99', '148') And 
      @PeopleSoftDepartmentID In (
        '9030', '9080', '9355', '9040', '<<OSCCALTECH>>', 
        '<<WDTSMO>>', '9195','<<OSVTS>>'
      ) Then 'Wichita Falls (WDS) - Tech'
    When @VirtualLocationID Is Null Or @VirtualLocationTypeID = 4 Then 'Others'
    Else @VirtualLocationDescription 
    End
 End

Area ルックアップに対して同様のことを行うと、最初の内部クエリは次のようになります

Select
  dbo.LookupArea(eh.virtuallocationID, v1.virtuallocationtypeid, vl.AreaId,  eh.PeopleSoftAreaID,
      eh.PeopleSoftDepartmentID, acs.OfferDate, eh.EmployeeTypeID) As Area, -- There may be other dependencies
  dbo.LookupLocation(eh.VirtualLocationID, vl.VirtualLocationDescription,
      vl.VirtualLocationTypeID, eh.peoplesoftDepartmentid) As Location,
  IsNull(dgl.DeptGroup, 'Other') 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 Outer Join
  dbEmployee.Summary.vwEmployeeHistory eh 
    On acs.EmployeeID = eh.EmployeeID And acs.OfferDate Between eh.StartDate And eh.EndDate 
    Left Outer Join
  dbEmployee.Config.vwName Rep 
    On eh.EmployeeID = Rep.EmployeeID 
    Left Outer Join 
  dbEmployee.Config.vwName Sup 
    On eh.BottomUp01ID = Sup.EmployeeID
    Left Outer Join
  dbEmployee.Config.vwName Mgr 
    On eh.BottomUp02ID = Mgr.EmployeeID
    Left Outer Join
  dbEmployee.Config.vwName Dir 
    On eh.BottomUp03ID = Dir.EmployeeID
    Left Outer Join
  dbEmployee.Config.vwVirtualLocation vl 
    On eh.VirtualLocationID = vl.VirtualLocationID 
    Left Outer Join
  dbEmployee.Config.vwDepartment d 
    On eh.DepartmentID = d.DepartmentID 
    Left Outer Join
  dbEmployee.Config.vwPeopleSoftDepartment psd
    On eh.PeopleSoftDepartmentID = psd.PeopleSoftDepartmentID
    Left Outer Join
  dbo.DepartmentGroupLookup dgl
    On eh.PeopleSoftDepartmentID = dgl.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

目標は、何が起こっているのかを理解できるようになるまで、この方法で単純化を続ける (または、少なくとも見えないようにする) ことです。

于 2012-11-15T20:34:28.833 に答える
0

編集: AD 列を正常に追加できました! 新しい問題: 結果は少しずれています。結果が場所に基づいてランク付けされる前は、それぞれの場所にポイントの合計に基づいてランクが割り当てられていました。それはきれいで、数字は合計されました。現在、重複した AD があり、ランキングが後退しています (合計ランキング ポイントの最小量が 1 位としてリストされています)。

INSERT ステートメントと select ステートメントに AD 列を追加しただけです。クエリの適切な場所全体に AD 列を追加することに加えて、指定された日付範囲の真のランキングを反映するために、クエリの操作または関数を変更する必要があることを誰か教えてもらえますか? この部分について、ご不明な点がございましたらお気軽にお問い合わせください。どうぞよろしくお願いいたします。

両方の一時テーブル (#ACS と ##HRRep) に AD 列が必要であり、それぞれの母集団 (INSERT INTO.... SELECT FROM) には GROUP BY に AD 列が必要です。次に、最後の SELECT で、AD 列の 2 つのテーブルと、既に結合式に含まれている他の列を結合する必要があります。

最終的な SELECT で GROUP BY は必要ないと思います。(私が思うに) 2 つのテーブルにはすでに areaid、場所などによって集計された結果があり、RANK() は集計ではなく単一行の関数です。和:

LEFT JOIN #HRRep AS B 
                ON a.areaid = b.areaid 
                AND a.monthname = b.monthname 
                AND a.location = b.location) a
/* Probably don't need this bit
GROUP BY a.Location, a.RepResolve, a.RRRank, a.ERP, a.ERPRank,a.HourRepeatPercent,
         a.RepeatRank, (a.RRRank + a.ERPRank + a.RepeatRank)
But this bit: */
ORDER BY (a.RRRank+a.EPRank+a.RepeatRank) DESC

マッピング テーブルを作成するという Laurence の提案 (彼はあえて最初のセット内の「隠蔽性」に飛び込みました) は、「隠蔽性」を 1 か所に分離するという点で優れています。

于 2012-11-16T10:16:50.917 に答える
0

ローレンスはそれを正しく持っています。

SQL コードがこのように見え始めると、インデントは私の (そしてみんなの) 友達です。派生セットがインデントされている場合、その定義の開始点と終了点を簡単に確認できます。

SELECT some columns 
FROM
     (lots of hideous code) SetA
WHERE
    Things AND
    More Things

私はあなたが対処するのに十分なほど不運なコードスニペットから恐ろしいもののほとんどを切り取った.

CREATE TABLE #ACSResults (AreaID VARCHAR(4), Location VARCHAR(50),MonthName VARCHAR(6), RepResolve FLOAT, ERP FLOAT)
INSERT INTO #ACSResults 
  SELECT 
-- ColListStart
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
-- ColListEnd
FROM
    (/*Eurgh!  Hideous legacy code that makes my eyes bleed just glancing at it*/) 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

--------------------------------------------------------------------------------REPEAT TABLE------------------------------------------------------------------------------------------------------
 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
  -- ColList Start
  eh.AreaID, vl.VirtualLocationDescription, Month (acs.statdate) AS MonthName,

Cast(Sum(acs.Repeats2Hr)as float) /nullif(Sum(acs.Calls2Hr), 0) as 'HourRepeatPercent'
    -- COlListEnd
From 
    /* More hideous legacy code */

「INSERT と SELECT の列は一致する必要があります」というエラーは、SELECT の列が INSERT によって参照されるテーブルの列と一致することを確認するだけで消えます (私のコメント -ColListStart と -ColListEnd はこの領域を定義します)。したがって、余分な列を各 CREATE TABLE に追加してから追加します (おそらく、最初はリテラルと同じように)

'AnAreaDirector' AS AreaDirector

) を SELECT ステートメントに、もちろん正しい順序で配置します。各 SELECT の最後 (つまり、他のすべての後) にも GROUP BY AreaDirector を追加します。

次に、本当の楽しみが始まります。これは、() 内のもの (私は切り取ったものです) を掘り下げ、その中で参照されているテーブルから AD 列を取得できるかどうか、またはまだ参加する必要があるかどうかを判断することです。別のテーブル。

于 2012-11-15T18:53:51.720 に答える