1)创建数据
CREATE TABLE Scores
(
ScoreID UNIQUEIDENTIFIER PRIMARY KEY,
StudentName NVARCHAR(50),
Title NVARCHAR(50),
Score INT,
)
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'张三','语文',90);
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'张三','数学',80);
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'张三','英语',70);
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'李四','语文',60);
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'李四','数学',50);
INSERT INTO Scores(ScoreID,StudentName,Title,Score)
VALUES(NEWID(),'王五','语文',40);
SELECT * FROM Scores
--DROP TABLE Scores

2)GROUP BY方法
SELECT StudentName,
MAX(CASE Title WHEN '语文' THEN Score ELSE 0 END) AS '语文' ,
MAX(CASE Title WHEN '数学' THEN Score ELSE 0 END) AS '数学' ,
MAX(CASE Title WHEN '英语' THEN Score ELSE 0 END) AS '英语'
FROM Scores
GROUP BY StudentName
ORDER BY StudentName

3)PIVOT方法
SELECT tbl1.StudentName
,ISNULL(tbl1.语文,0) 语文
,ISNULL(tbl1.数学,0) 数学
,ISNULL(tbl1.英语,0) 英语 FROM
(
SELECT StudentName,Title,Score FROM Scores
) s
PIVOT
(
SUM(Score)
FOR Title IN (语文,数学,英语)
) AS tbl1

PIVOT方法2,没有参加考试的显示为NULL
SELECT * FROM
(
SELECT StudentName,Title,Score FROM Scores
) s
PIVOT
(
MAX(Score)
FOR Title IN (语文,数学,英语)
) AS tbl1

本文介绍了一种使用SQL进行学生成绩统计的方法,包括利用GROUP BY和PIVOT函数实现成绩的汇总与展示,适用于需要对多门科目成绩进行快速统计的场景。
977

被折叠的 条评论
为什么被折叠?



