创建 SQL 视图以显示每个科目的分数和每个学生的总分数
Create SQL view to show mark for each subject and total of marks for each student
我需要从这 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'), (2, 'Science'), (3, 'English')
INSERT INTO Exam
VALUES (1, 1, 10), (1, 2, 9), (1, 3, 8),
(2, 1, 9), (2, 2, 10), (2, 3, 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
我需要从这 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'), (2, 'Science'), (3, 'English')
INSERT INTO Exam
VALUES (1, 1, 10), (1, 2, 9), (1, 3, 8),
(2, 1, 9), (2, 2, 10), (2, 3, 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