数据透视表与mysql_通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)...

本文介绍了如何在MSSQL和Oracle中使用Pivot函数来实现类似Excel透视表的功能,展示了通过Case When和Pivot语法进行数据统计的方法,帮助数据库管理员和开发者更好地理解和应用SQL的透视转换技巧。
摘要由CSDN通过智能技术生成

在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能

一、MSsqlserver中我们通常的用法

1、Sqlserver数据库测试

---创建测试表

Create table s(

[name] nvarchar(50),

book nvarchar(50),

saledNumber int

)

----插入测试数据

insert into s ([name],book,saledNumber) values('小王','java从入门到精通',10);

insert into s ([name],book,saledNumber)values('小李','java从入门到精通',15);

insert into s ([name],book,saledNumber)values('小王','C#高级编程',8);

insert into s ([name],book,saledNumber)values('小李','java从入门到精通',7);

insert into s ([name],book,saledNumber)values('小王','java从入门到精通',9);

insert into s ([name],book,saledNumber)values('小李','java从入门到精通',2);

insert into s ([name],book,saledNumber)values('小王','C#高级编程',3);

insert into s ([name],book,saledNumber)values('小李','java从入门到精通',5);

insert into s ([name],book,saledNumber)values('小李','C#高级编程',5);

---1、通过case when 方式

SELECT [name], sum(case book when 'java从入门到精通' then saledNumber else 0 end) as [java从入门到精通],sum(case book when 'C#高级编程' then saledNumber else 0 end) as [C#高级编程], sum(saledNumber) as [sum] from s group by [name]

---2、通过pivot

select sa.name,sa.java从入门到精通,sa.C#高级编程 ,sa.java从入门到精通+sa.C#高级编程 as 合计 from s

pivot(sum(saledNumber) for book in (java从入门到精通,C#高级编程)) sa

二、oracle 的用法

---创建测试表

Create table s(

name varchar(50),

book varchar(50),

saledNumber number(9)

)

----插入测试数据

insert into s (name,book,saledNumber) values('小王','java从入门到精通',10);

insert into s (name,book,saledNumber)values('小李','java从入门到精通',15);

insert into s (name,book,saledNumber)values('小王','C#高级编程',8);

insert into s (name,book,saledNumber)values('小李','java从入门到精通',7);

insert into s (name,book,saledNumber)values('小王','java从入门到精通',9);

insert into s (name,book,saledNumber)values('小李','java从入门到精通',2);

insert into s (name,book,saledNumber)values('小王','C#高级编程',3);

insert into s (name,book,saledNumber)values('小李','java从入门到精通',5);

insert into s (name,book,saledNumber)values('小李','C#高级编程',5);

----

---1、通过case when 方式

SELECT name, sum(case book when 'java从入门到精通' then saledNumber else 0 end) as java从入门到精通 ,sum(case book when 'C#高级编程' then saledNumber else 0 end) as C#高级编程, sum(saledNumber) as sum from s group by name;

---2、通过pivot

select * from (select name,saledNumber,book from s group by name, saledNumber, book )

pivot(sum(saledNumber) for book in ('java从入门到精通','C#高级编程')) ;

描述不清或者有错误的地方,希望大家指正修改,对于oracle中更多关于Pivot 和 Unpivot

使用简单的 SQL 以电子表格类型的交叉表报表显示任何关系表中的信息,并将交叉表中的所有数据存储到关系表中。请参考oracle官方实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值