少し前に言われたコード化されたレポートがあり、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