Использование сводных данных для расчета столбца - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 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

Теперь мне нужно использовать значения из моего pivot для получения дополнительных столбцов.Я хочу создать столбец с именем FocusLH и заполнить его значением на основе расчета.Вычисление таково: если результат Effort + Focus = 2, присвойте значение 5 в FocusLH, если результат 3, присвойте значение 4 и т. Д. И т. Д.

Возможно ли это?

1 Ответ

0 голосов
/ 09 октября 2018

Я поместил оператор 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
...