使用数据透视表计算列

时间:2018-10-09 13:40:45

标签: tsql pivot calculation

我有一个PIVOT

SELECT         txtSchoolID, intSubjectID, txtPreName, txtSurname, txtForm, [636] AS Effort, [637] AS Focus, [638] AS Participation, [639] AS Groupwork, [640] AS Rigour, [641] AS Curiosity, [642] AS Initiative,
                [643] AS SelfOrganisation, [644] as Perserverance       

FROM         (SELECT  txtSchoolID, intSubjectID, intGradeTransposeValue, intGradeID, txtForm, txtPreName, txtSurname FROM VwReportsManagementAcademicReports 
                WHERE (intReportCycleID = 142) AND (intReportProgress = 1)) p
PIVOT
(AVG        (intGradeTransposeValue)
FOR intGradeID IN ([636], [637], [638], [639], [640], [641], [642], [643], [644] )
) AS pvt

我现在需要使用我的数据透视表中的值来生成其他列。我想创建一个名为FocusLH的列,并使用基于计算的值填充它。计算公式为-如果Effort + Focus = 2的结果则在FocusLH中分配值5,如果结果为3则分配值4等等

这可能吗?

1 个答案:

答案 0 :(得分:0)

我将CASE语句放置在错误的位置,需要使用intGradeID代替别名。现在可以使用

SELECT         txtSchoolID, intSubjectID, txtPreName, txtSurname, txtForm, [636] AS Effort, [637] AS Focus, [638] AS Participation, [639] AS Groupwork, [640] AS Rigour, [641] AS Curiosity, [642] AS Initiative,
                [643] AS SelfOrganisation, [644] as Perserverance,       
        CASE WHEN [636] + [637] = 2 THEN 5 
        WHEN [636] + [637] =3 THEN 4 
        WHEN [636] + [637] =4 THEN 3 
        WHEN [636] + [637] =5 THEN 2         
        ELSE NULL END AS FocusLH 
FROM         (SELECT  txtSchoolID, intSubjectID, intGradeTransposeValue, intGradeID, txtForm, txtPreName, txtSurname                
                FROM VwReportsManagementAcademicReports 
                WHERE (intReportCycleID = 142) AND (intReportProgress = 1)) p
PIVOT
(MAX        (intGradeTransposeValue)
FOR intGradeID IN ([636], [637], [638], [639], [640], [641], [642], [643], [644] )
) AS pvt