我终于想通了如何通过一些在线文章的支点来获得这一点。但是我仍然有两个问题,下面发布的代码可以正常工作并返回一年的结果。然而,我仍然遇到的问题是,有一个参数被发送到这个 sproc 调用“DateType”中,它可以是“M”或“Y”。如果是“M”,我需要它遵循以下逻辑。如果它是“Y”,则需要它遵循相同的逻辑但填充“YTD”字段。我不确定如何将“IF”语句集成到此 Pivot 的使用中,或者是否可能。对此的任何帮助将不胜感激。
下面代码中未表示的第二个问题,目前是逻辑显示一年的结果。但是,我还需要在结果字段旁边添加评分字段。示例:'JAN_Result | Jan_Rating | 二月结果 | Feb_Rating...' 可以像这样旋转两个字段吗?
更新的当前逻辑:
'code' Select EmployeeID ,Employee ,EmpGroupID ,PA ,EmpLevel ,ObjectiveName as Objective ,Objectiveid AS Objectiveid ,Weighting ,ReportingYear ,[1] as JAN_Result ,[2] as FEB_Result ,[3] as MAR_Result ,[4] as APR_Result , [5] 作为 MAY_Result ,[6] 作为 JUN_Result ,[7] 作为 JUL_Result ,[8] 作为 AUG_Result ,[9] 作为 SEP_Result ,[10] 作为 OCT_Result ,[11] 作为 NOV_Result ,[12] 作为 DEC_Result ,[13 ] 作为年初至今
From
(
Select
EmployeeID
,Employee
,EmpGroupID
,PA
,EmpLevel
,ObjectiveName
,Objectiveid
,Weighting
,ReportingYear
,Result
,Rating
,Max(CASE WHEN r.datetype = 'M' THEN Month(startdate) WHEN r.datetype = 'Y' THEN 13 END) as StartMonth
From #tblResults R
INNER JOIN @Emphist h
ON r.Empgroupid = h.Groupid
LEFT OUTER JOIN Config.tblRatingDescription rt
ON r.Rating = rt.RatingID
LEFT OUTER JOIN Config.tblRatingDescription rtovr
ON r.RatingOverride = rtovr.RatingID
WHERE r.datetype IN ('M','Y')
and r.startdate BETWEEN '2012-01-01' AND '2012-04-01'
Group By
EmployeeID,
Employee,
EmpGroupID,
PA,
EmpLevel,
ObjectiveName,
Objectiveid,
ReportingYear,
Weighting,
h.sortorder,
Result,
Rating
)ps
PIVOT
(
max(result)
FOR StartMonth IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13])
) as pvt
'代码'
示例数据:
EmployeeID Employee EmpGroupID PA EmpLevel Objective Jan_Result Feb_Result
1010101 TestUser 111 NE CustService Equip_Res 94.44 9.92