程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 通過sql做數據透視表,數據庫表行列轉換(pivot和Unpivot用法)(一),pivotunpivot

通過sql做數據透視表,數據庫表行列轉換(pivot和Unpivot用法)(一),pivotunpivot

編輯:Oracle教程

通過sql做數據透視表,數據庫表行列轉換(pivot和Unpivot用法)(一),pivotunpivot


在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved