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

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

一、MSsqlserver中我们通常的用法

</pre><pre name="code" class="sql">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、通过pivotselect 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);—-<pre name="code" class="sql">—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、通过pivotselect * 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官方实例

—1、通过case when 方式

版权声明:本文为博主原创文章,未经博主允许不得转载。

,要想捉大鱼,不能怕水深。要想摘玫瑰,就得不怕刺。

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

相关文章:

你感兴趣的文章:

标签云: