0

少し前に言われたコード化されたレポートがあり、1 年間の「評価」列と「結果」列のデータが表示されます。

現在、スクリプトはこれを達成するために Case ステートメントを使用していますが、これがピボット関数の目的であり、コード行を節約できると思います。ピボット関数を使用するようにロジックを変更するのを手伝ってくれる人はいますか?現在のロジック:

    Select
EmployeeID, 
Employee, 
--Datetype, 
EmpGroupID, 
PA, 
EmpLevel, 
ObjectiveName as Objective, 
Objectiveid AS Objectiveid,
Weighting,
ReportingYear,

max(Case When r.DateType = 'M' 
          and Month(r.StartDate) = 1 
          and r.result IS NOT NULL
         Then r.Result

         When r.DateType = 'M' 
          and Month(r.StartDate) = 1 
          and r.result IS NULL 
      and r.rating is NOT NULL THEN COALESCE(rtovr.ratingShortDesc,rt.ratingShortDesc)
    Else null
     END) as Value_January_1,

MAX(Case When r.DateType = 'M' 
          and Month(r.StartDate) = 1
         Then dbo.udfGetRating(case when r.RatingOverride is null            
                                    then r.Rating 
                               else r.RatingOverride 
                               end) + '|' + CAST(UserOverride AS CHAR(1)) + '|' + rt.ratingShortDesc
         Else null
     END) as Rating_January_1,


From #tblResults R

WHERE r.datetype IN ('M','Y')

... 12 月までの選択でそのケース ロジックに従います。

テーブル #tblResult のデータの例:

EmployeeID Employee Datetype EmpGroupID PA EmpLevel ObjectiveName Objectiveid Weighting RPTYear ObjSortOrder ObjGrpSortOrder Result Rating RatingOverride startdate UserOverride 
552940 test Q 664 Sr Rep 1 Overall Rating -1 1 2012 0 0 2 2.00 NULL 2012-01-01 0
552940 test Q 664 Sr Rep 1 Overall Rating -1 1 2012 0 0 2.39 2.00 NULL 2012-04-01 0
4

0 に答える 0