資料庫開發基礎---行列轉換
drop table score;
create table score(
name varchar2(10),
subject varchar2(10),
grade number(3)
) ;
insert into score values('Zhang','Language',80);
insert into score values('Zhang','Math',92);
insert into score values('Zhang','English',76);
insert into score values('Li','English',50);
insert into score values('Li','Math',95);
insert into score values('Li','Language',81);
insert into score values('Wang','Language',73);
commit;
select * from score;
----將score中資料轉換成 name,language,math,english 的形式顯示
----方法一:利用組合函式
select name,
decode(subject,'Language',grade)Language,
decode(subject,'Math',grade)Math,
decode(subject,'English',grade)English
from score;
----------------------
select name,
sum(decode(subject,'Language',grade))Language,
sum(decode(subject,'Math',grade))Math,
sum(decode(subject,'English',grade))English
from score
group by name;
-----方法二:利用oracle11g中函式pivot
select * from score
pivot (sum(grade)
for subject
in('Language','English','Math'));
1.聚合列取值。需要告訴pivot函式進行轉列的過程中,聚合操作的函式和處理物件;
2.行轉列標準。依據那個列進行行轉列;
3.列轉行取值。因為要將資料行取值轉成列,我們需要告訴Oracle那些取值成列,並且這些取值成列的過程中,列順序是如何的;
----將score1中資料轉換成 name,subject,gread的形式顯示
create table score1 as (select name,
sum(decode(subject,'Language',grade))Language,
sum(decode(subject,'Math',grade))Math,
sum(decode(subject,'English',grade))English
from score
group by name);
select * from score1;
--------方法1
select name, 'Language' object,language grade from score1
UNION ALL
select name, 'Math' object,math grade from score1
union all
select name, 'English' object,english grade from score1
order by name desc;
------方法二
Select * from score1
Unpivot
(grade for Subject in(Language,English,Math));
Select * from score1
Unpivot EXCLUDE nulls
(grade for Subject in(Language,English,Math));
----方法三
drop table score2
create table score2(
name varchar2(10),
subject varchar2(10),
grade number(3)
) ;
-------------------
insert all
into score2 values(name,'Language',Language)
into score2 values(name,'English',English)
into score2 values(name,'Math',Math)
select name,Language,English,Math
from score1;
select * from score2;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-1390020/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- Restcloud ETl實踐之資料行列轉換RESTCloud
- 資料庫開發如何向DevOps模式轉換?資料庫dev模式
- AndoridSQLite資料庫開發基礎教程(6)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(5)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(4)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(10)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(9)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(8)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(7)SQLite資料庫
- [Java基礎]之 資料型別轉換Java資料型別
- Andorid SQLite資料庫開發基礎教程(2)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(1)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(3)SQLite資料庫
- 資料庫轉換工具,不同資料庫之前任意轉換資料庫
- mysql行列轉換詳解MySql
- Python基礎之集合和資料型別轉換Python資料型別
- 記錄一個行列轉換
- 資料庫基礎資料庫
- 資料庫 基礎資料庫
- 在報表中錄入資料時如何實現行列轉換
- 【轉】交換機開發(四)—— ARP 基礎知識解析
- 資料庫基礎使用資料庫
- 人大金倉資料庫轉換資料庫
- 轉型進入IT行業,0基礎學習大資料開發需要什麼基礎?行業大資料
- Oracle行列轉換及pivot子句的用法Oracle
- Spark實現行列轉換pivot和unpivotSpark
- 資料庫設計基礎資料庫
- 資料庫基礎概念理解資料庫
- MySQL資料庫注入基礎MySql資料庫
- Redis基礎(二)資料庫Redis資料庫
- 【資料庫】Redis基礎篇資料庫Redis
- 31. 資料庫基礎資料庫
- 資料庫基礎知識資料庫
- Oracle資料庫日期格式轉換操作Oracle資料庫
- Oracle DG資料庫狀態轉換Oracle資料庫
- 轉行進入IT行業,0基礎學習大資料開發必備的基礎有哪些?行業大資料
- web 展現資料時如何實現行列互換Web
- GEO資料庫基礎知識資料庫