在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官方實例
http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html