创建 SQL 视图以显示每个科目的分数和每个学生的总分

问题描述

我需要从这 3 个表中创建一个视图,以显示此屏幕截图中的数据:

enter image description here

创建这 3 个表:

CREATE TABLE Student
(
    idStu int PRIMARY KEY,name varchar(30)
)

CREATE TABLE Subjects
(
    idSub int PRIMARY KEY,subjName varchar(30)
)

CREATE TABLE Exam
(
    idStu int REFERENCES Student,idSub int REFERENCES Subjects,Mark float,CONSTRAINT idStu_idSub PRIMARY KEY(idStu,idSub)
)

然后我插入一些值:

INSERT INTO Student 
VALUES (1,'Jacob'),(2,'Amilee')

INSERT INTO Subjects 
VALUES (1,'Mathematics'),'Science'),(3,'English')

INSERT INTO Exam 
VALUES (1,1,10),(1,2,9),3,8),7)

解决方法

您需要条件聚合(又名 PIVOT

CREATE VIEW View_MyHomeworkThatICantBeBotheredToDo

AS

SELECT
    Student = stu.name,Mathematics = SUM(CASE WHEN sub.subjName = 'Mathematics' THEN e.Mark END),Science = SUM(CASE WHEN sub.subjName = 'Science' THEN e.Mark END),English = SUM(CASE WHEN sub.subjName = 'English' THEN e.Mark END),Total = SUM(e.Mark)
FROM Student stu
JOIN Exam e ON e.idStu = stu.idStu
JOIN Subjects sub ON sub.idSub = e.idSub
GROUP BY stu.idStu,stu.name;

GO