橫表和縱表互相轉換 sql面試題

2021-10-24 10:51:27 字數 780 閱讀 6669

有這樣一張橫表a

name

course

score

小明英語

64小明

語文45

小明數學

43小紅

英語34

小紅語文

76小紅

數學56

需要轉換成如下b表:

name

語文數學

英語小明

4543

64小紅

7656

34這裡主要考察  case  when的用法

select name,sum(case when course='語文' then score else 0 end),

sum(case when course='英語' then score else 0 end),

sum(case when course='數學' then score else 0 end)

from a

group by name

如果是b表轉換為a表

主要考察union all用法

select  name,'語文' as course,語文 as score from b  

union all

select name,'數學' as course,數學 as score from b

union all

select name,'英語' as course,英語 as score from b

橫表縱表轉換

橫表就是普通的建表方式,如表結構為 主鍵 欄位1 欄位2 欄位3.如果變成縱表後,則表結構為 主鍵 字段 字段值。而字段 則為字段1 欄位2 欄位3.具體為電信行業的例子。以使用者帳單表為例,一般出賬時使用者有很多費用,其資料一般儲存為 時間,客戶id,費用科目,費用。這種儲存結構一般稱為縱表,其特...

縱表轉橫表sql

縱表結構 fname ftype fvalue 小明 zaocan 10 小明 zhongcan 20 小明 wancan 5 轉換後的表結構 fname zaocan value zhongcan value wancan value 小明 10 20 5 縱表轉橫表sql如下 select fn...

sql實現縱表變橫表

網上所有的縱橫表轉換都是千篇一律的,參考價值都不大,而且只適合那種資料量固定的學生成績表的橫縱轉化,但是當真正遇到大資料量的批量轉換的時候是行不通的,下面介紹一種相對靈活的大量資料的橫縱表轉換 表結構 如上圖所示,其中index id中以0結尾的表示的是服務名,以1結尾的表示裝置rac名稱,2結尾的...