问题描述
我需要从这 3 个表中创建一个视图,以显示此屏幕截图中的数据:
创建这 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