1. 程式人生 > 其它 >行轉列和列轉行,經典案例解析

行轉列和列轉行,經典案例解析

技術標籤:資料開發

一、行轉列

1、建表

create table table01(
  sname varchar2(10), --姓名
  subject varchar2(10), --科目
  score int    --分數
);

2、表中資料如下圖顯示

3、行轉列轉換程式碼

方式一(簡單):
select * from table01 pivot (  sum(score) for subject in ('語文','數學','英語')  );


方式二(麻煩):
select sname, 
       sum(case when subject='語文' then score else null end)as 語文,
       sum(case when subject='數學' then score else null end)as 數學,
       sum(case when subject='英語' then score else null end)as 英語 
from table01 
group by sname;


pivot用法:
    pivot (  sum(金額、分數、年齡等存放指標值的列) for 轉換前的列名 in (轉換後的多個列名)  );

4、行轉列如下圖顯示

二、列轉行

1、建表

create table table02(
    sname varchar2(10),  --姓名
    語文 int,  --語文科目
    數學 int,  --數學科目
    英語 int   --英語科目
);

2、表中資料如下圖所示

3、列轉行轉換程式碼

方式一(簡單):
select * from table02 unpivot ( score for subject in (語文,數學,英語))

方式二(麻煩):
select sname,
       '語文' subject,
       sum(語文) as score
from table02 group by sname 
union all
select sname,
       '數學' subject,
       sum(數學) as score
from table02 group by sname 
union all
select sname,
       '英語' subject,
       sum(英語) as score
from table02 group by sname 
order by sname;


unpivot用法:
for 後面的subject是轉換後的列名  
in  後面是需要轉換的列名(語文,數學,英語) 
score 是轉換前列名(語文,數學,英語)對應的值

4、列轉行如下圖所示