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

SQL Join another lookup table in a pivot table

我的数据库中有一个名为 Grades 的 table 用于将学生成绩记录为他们参加的每一年和每学期的分数。这些分数使用查找 table 转换为 GCSE 结果。虽然我可以 return 使用枢轴 table 的分数,但我不确定如何 return a table 用分数代替 GCSE 成绩。

我的成绩 table 看起来像这样:

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

我的 GradesToPoints 查找 table 如下所示:

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

我有以下 SQL 语句,其中 return 是一个 table,其中包含我需要的列,但带有点,我希望每一列(Y7T1、Y7T2 等)到 return 该点的 GCSE 成绩,使用查找 table GradesToPoints.

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

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

看来您的 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