1、准备工作,建立表以及插入数据
CREATE TABLE StuScore
(
StuName VARCHAR(20), --姓名
Subject VARCHAR(20), --科目
Score INT --成绩
);
/*-添加学生成绩信息-*/
INSERT INTO StuScore VALUES('刘三','语文',60);
INSERT INTO StuScore VALUES('刘三','数学',80);
INSERT INTO StuScore VALUES(刘三','英语',70);
INSERT INTO StuScore VALUES('李以','语文',50);
INSERT INTO StuScore VALUES('李以','数学',90);
INSERT INTO StuScore VALUES('李以','英语',60);
INSERT INTO StuScore VALUES('伍三','语文',80);
INSERT INTO StuScore VALUES('伍三','数学',40);
2、sql server版本
2.1、行转换为列
方法一:
SELECT StuName,SUM(CASE WHEN SUBJECT='语文' THEN Score ELSE 0 end) '语文',
SUM(CASE WHEN SUBJECT='数学' THEN Score ELSE 0 end) '数学',
SUM(CASE WHEN SUBJECT='英语' THEN Score ELSE 0 end) '英语'
FROM StuScore
GROUP BY StuName
方法二:
用pivot
SELECT *
FROM StuScore
PIVOT(max(Score) FOR Subject IN(语文,数学,英语)) pt
2.2、列转化为行
SELECT * FROM
(SELECT *
FROM StuScore
PIVOT(max(Score) FOR Subject IN(语文,数学,英语)) pt)a UNPIVOT(Score FOR Subject IN(语文,数学,英语)) T
3、oracle 版本
3.1、行转换为列
SELECT *
FROM StuScore
PIVOT(max(Score) FOR Subject IN('语文' as 语文,'数学' as 数学,'英语' as 英语))
3.2、列转化为行
WITH TT AS(
SELECT *
FROM StuScore
PIVOT(max(Score) FOR Subject IN('语文' as 语文,'数学' as 数学,'英语' as 英语)))
--SELECT * FROM TT;
select * from TT unpivot(Score for Subject in (语文 as '语文',数学 as '数学',英语 as '英语' ));
备注: