筆試 SQL語句之橫豎表轉換

2021-10-08 02:39:34 字數 2664 閱讀 6746

三、橫表轉豎表

最近筆試中有 【將豎表轉換為橫表】的題 ,記錄一下橫豎表轉換的sql語句~

豎表結構

create

table table_a

( 姓名 varchar(20

),課程 varchar(20

),成績 int

)insert

into table_a(姓名,課程,成績)

values

('張三'

,'語文',60

)insert

into table_a(姓名,課程,成績)

values

('張三'

,'數學',70

)insert

into table_a(姓名,課程,成績)

values

('張三'

,'英語',80

)insert

into table_a(姓名,課程,成績)

values

('李四'

,'語文',90

)insert

into table_a(姓名,課程,成績)

values

('李四'

,'數學'

橫表結構

create

table table_b

( 姓名 varchar(20

),語文 int

, 數學 int

, 英語 int

)insert

into table_b(姓名,語文,數學,英語)

values

('張三',60

,70,80

)insert

into table_b(姓名,語文,數學,英語)

values

('李四',90

[姓名]

,sum

(case

[課程]

when

'語文'

then

[成績]

end)

as[語文]

,sum

(case

[課程]

when

'數學'

then

[成績]

end)

as[數學]

,sum

(case

[課程]

when

'英語'

then

[成績]

end)

as[英語]

from

[table_a]

group

by[姓名]

select

*from

[table_a]

pivot

(max

([成績]

)for

[課程]in(

[語文]

,[數學]

,[英語]))

as 臨時表

執行結果

[姓名]

,'語文'

as 課程,語文 as

[成績]

from

[table_b]

union

allselect

[姓名]

,'數學'

as 課程,數學 as

[成績]

from

[table_b]

union

allselect

[姓名]

,'英語'

as 課程,英語 as

[成績]

from

[table_b]

order

by[姓名]

,[課程]

select

[姓名]

,[課程]

,[成績]

from

[table_b]

unpivot

([成績]

for[課程]in(

[語文]

,[數學]

,[英語]))

as 臨時表

order

by[姓名]

,[課程]

執行結果:

筆試題 sql語句

建表語句 table structure for score drop table if existsscore create tablescore idint 11 default null,snoint 11 default null,namevarchar 255 default null,s...

sql語句之表建立操作

查詢所有的資料庫 show databases 建立資料庫 create database 資料庫名 刪除資料庫 drop database 資料庫名 sql語句的表操作 選中操做的資料庫 use 資料庫名 檢視資料庫中的所有表 show tables 建立表 create table 表名 id ...

SQL語句之普通行列轉換

假設有張學生成績表 tb rowtocol 如下 name subject result 張三 語文 73 張三 數學 83 張三 物理 93 李四 語文 74 李四 數學 84 李四 物理 94 想變成 姓名 語文 數學 物理 張三 73 83 93 李四 74 84 94 declare sql...