SQL Server行列转换

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);

1.1 使用Case WHEN 实现行转列

/*-使用Case WHEN 实现行转列-*/
SELECT StuName AS '姓名',
	MAX(CASE Subject WHEN '语文' THEN Score ELSE 0 END) AS '语文',
	MAX(CASE Subject WHEN '数学' THEN Score ELSE 0 END) AS '数学',
	MAX(CASE Subject WHEN '英语' THEN Score ELSE 0 END) AS '英语',
	SUM(Score) AS '总分',
	AVG(Score) AS '平均分'
FROM StuScore 
GROUP BY StuName

执行结果:

1.2 使用PIVOT实现行转列

/*-使用PIVOT实现行转列-*/
SELECT PVT.StuName AS '姓名',PVT.语文,PVT.数学,PVT.英语
FROM StuScore
PIVOT(MAX(Score) FOR Subject IN(语文,数学,英语)) AS PVT

执行结果:

2、列行转换

创建创建学生成绩表2并添加学生成绩信息。

/*-创建学生成绩表2-*/
CREATE TABLE StuScore2
(
	StuName VARCHAR(20),  --姓名
	Chinese INT,          --语文成绩
	Mathematical INT,     --数学成绩
	English INT           --英语成绩   
);

/*-添加学生成绩信息-*/
INSERT INTO StuScore2 VALUES('张三',60,80,70);
INSERT INTO StuScore2 VALUES('李四',50,90,60);
INSERT INTO StuScore2 VALUES('王五',80,40,50);

2.1 使用UNION实现列转行

/*-使用UNION实现列转行-*/
SELECT * FROM (
	SELECT StuName AS '姓名', '语文' AS '科目', Chinese AS '成绩' FROM StuScore2
	UNION ALL 
	SELECT StuName AS '姓名', '数学' AS '科目', Mathematical AS '成绩' FROM StuScore2
	UNION ALL 
	SELECT StuName AS '姓名', '英语' AS '科目', English AS '成绩' FROM StuScore2
) T

执行结果:

2.2 使用UNPIVOT实现列转行

/*-使用UNPIVOT实现列转行-*/
SELECT * 
FROM StuScore2
UNPIVOT(Score FOR Subject IN(Chinese,Mathematical,English)) T

执行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值