可以在Pivot函数中使用IF语句吗?

时间:2013-09-19 22:35:22

标签: sql sql-server sql-server-2008 if-statement pivot

我终于想出了如何通过一些在线文章来透视这一点。但是我仍然有两个问题,下面发布的代码工作正常,并返回我一年的跨度结果。然而,我仍然遇到的问题是,一个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    

1 个答案:

答案 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