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

2021-10-12 03:44:02 字數 1867 閱讀 4014

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 後面是subject列中儲存的值(語文,數學,英語)

score 轉換後的列,對應的是轉換前列名(語文,數學,英語)的值

4、列轉行如下圖所示

行轉列 列轉行

行轉列 select t.t.rowid from test1 t id c1 c2 c3 1 小紅 數學 10 2 小紅 語文 20 3 小欄 數學 15 4 小欄 語文 25 test1 oracle select c1,to char wm concat c2 c2 from test1 gr...

經典SQL問題 行轉列,列轉行

情景簡介 學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料庫grade裡面資料如下圖,假定每個人姓名都不一樣,作為主鍵。本文以mysql為基礎,其他資料庫會有些許語法不同。資料庫資料 mysql select from grade id name cours...

hive 列轉行和行轉列

1.假設我們在hive中有兩張表,其中一張表是存使用者基本資訊,另一張表是存使用者的位址資訊等,表資料假設如下 user basic info id name1a 2b3c 4duser address name address aadd1 aadd2 badd3 cadd4 dadd5 id na...