我终于想出了如何通过一些在线文章来透视这一点。但是我仍然有两个问题,下面发布的代码工作正常,并返回我一年的跨度结果。然而,我仍然遇到的问题是,一个parmeter被发送到这个sproc调用'DateType',它可以是'M'或'Y'。如果它是'M'我需要它遵循下面的逻辑。如果是'Y',需要它遵循相同的逻辑,但填充'YTD'字段。我不确定如何将“IF”语句集成到此Pivot的使用中,或者甚至可能。对此的任何帮助都会有很大的帮助。
下面代码中未显示的第二个问题,目前逻辑显示一年的结果。但是我还需要在结果字段旁边添加评级字段。示例:'JAN_Result | Jan_Rating | Feb_Result | Feb_Rating ......'两个字段可以像这样转动吗?
更新当前逻辑:
'代码' 选择EmployeeID ,雇员 ,EmpGroupID ,PA ,EmpLevel ,ObjectiveName as Objective ,Objectiveid AS Objectiveid ,加权 ,ReportingYear ,[1]为JAN_Result ,[2]为FEB_Result ,[3]为MAR_Result ,[4]为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]为YTD
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
答案 0 :(得分:0)
你的陈述很大。我不会重复。基本上,您需要做的就是替换这一行:
,Month(startdate) as StartMonth
带有:
,CASE WHEN r.datetype = 'M' THEN Month(startdate) ELSE 13 END as StartMonth
如果其他值出现,您可以继续声明:
,CASE WHEN r.datetype = 'M' THEN Month(startdate) WHEN r.datetype = 'Q' THEN 14 ELSE 13 END as StartMonth