SQL在数据透视表中加入另一个查找表

时间:2015-02-26 21:28:52

标签: sql sql-server database join pivot

我的数据库中有一张名为Grades的表,用于记录学生成绩,作为他们每年和每学期的学分。使用查找表将这些点转换为GCSE结果。虽然我可以使用数据透视表返回积分,但我不知道如何返回一个表格,将这些积分换成GCSE等级。

我的成绩表如下所示:

PupilID, GradeSubject, YearAndTerm, Grade
10001, English, Y7T1, 81
10001, English, Y7T2, 85
10001, English, Y7T3, 92

我的GradesToPoints查找表如下所示:

PointGrade, GCSEGrade
80, E-
81, E
82, E+
83, D-
84, D

我有以下SQL语句返回一个表格,其中包含我需要的列但是有点,我希望每列(Y7T1,Y7T2等)通过使用查找表GradesToPoints返回该点的GCSE等级。

SELECT *
FROM (
    SELECT PupilID, GradeSubject, YearAndTerm, Grade  
    FROM Grades  
    ) AS DT
PIVOT(SUM(Grade) FOR YearAndTerm IN ([KeyStage2],[Y7T1],[Y7T2],[Y7T3], 
    [Y8T1],[Y8T2],[Y8T3],[Y9T1],[Y9T2],[Y9T3],[Y10T1],[Y10T2],[Y10T3],
    [Y11T1],[Y11T2],[Y11T3],[Y12T1],[Y12T2],[Y12T3],[Y13T1],[Y13T2],
    [Y13T3],[Y14T1],[Y14T2],[Y14T3])) AS PVT

提前感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:1)

您的SUM聚合似乎只是一个假人。我不得不将其更改为MIN,因此它可以使用char列。关键是在内部连接中,需要在枢轴之前完成。

SELECT *
FROM (
    SELECT g.PupilID, g.GradeSubject, g.YearAndTerm, g2p.GCSEGrade
    FROM Grades as g INNER JOIN GradesToPoints as g2p on g2p.PointGrade = g.Grade
    ) AS DT
PIVOT(MIN(GCSEGrade) FOR YearAndTerm IN ([KeyStage2],[Y7T1],[Y7T2],[Y7T3], 
    [Y8T1],[Y8T2],[Y8T3],[Y9T1],[Y9T2],[Y9T3],[Y10T1],[Y10T2],[Y10T3],
    [Y11T1],[Y11T2],[Y11T3],[Y12T1],[Y12T2],[Y12T3],[Y13T1],[Y13T2],
    [Y13T3],[Y14T1],[Y14T2],[Y14T3])) AS PVT