行和列的转换(Oracle与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);

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 '英语' ));

备注:

参考链接:oracle中的行列转换 - xuzhong86 - 博客园

SQL Server行列转换_pan_junbiao的博客-CSDN博客_sqlserver行列转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值