資料庫之SQL行列轉換

2021-09-11 07:56:28 字數 1548 閱讀 9851

資料分析經常會遇到行列轉換,sql中的行列轉化集可以用常規的case when/union all語句,也可以用專門的行列轉換函式pivot和unpivot。

資料表表1(t1)如下表所示,是資料庫常見的儲存形式,課程的分數按行記錄:

姓名課程

分數張三

語文80

張三數學

90張三

英語98

李四語文

82李四

數學96

李四英語

88資料表表2(t2)如下表所示,課程的分數按列記錄:

姓名語文

數學英語

張三80

9098

李四82

9688

select 姓名,

sum(

case

when 課程=

'語文'

then 成績 else0)

as 語文,

sum(

case

when 課程=

'數學'

then 成績 else0)

as 數學,

sum(

case

when 課程=

'英語'

then 成績 else0)

as 英語

from t1

group

by 姓名

select 姓名,

'語文'

as 課程,

#'語文'字串為課程列的值

語文 as 分數 #語文列的數值作為分數

from t2

union

allselect 姓名,

'數學'

as 數學,

語文 as 分數

from t2

union

allselect 姓名,

'英語'

as 英語,

英語 as 分數

from t2

order

by 姓名 desc

select t2.姓名,t2.語文,t2.數學,t2.英語

from t1

pivot

(sum

(分數)

#目標表(t2)的列值**於源表(t1)的哪個列

for 課程 #目標表(t2)的列標籤**於源表(t1)的哪個列

in(語文,數學,英語)

#目標表(t2)的列名

)as t2

select t1.姓名,t1.課程,t1.分數

from t2

unpivot

(分數 #源表(t2)的列值的在轉化後的表(t1)中的列標籤

for 課程 #源表(t2)的所有列標籤在轉化後的表(t1)中的列標籤

in(語文,數學,英語)

#源表(t2)的列標籤都有哪些

)as t1

SQL2005資料庫行列轉換

注意 列轉行的方法可能是我獨創的了,呵呵,因為在網上找不到哦,全部是我自己寫的,用到了系統的syscolumns 一 行轉列的方法 先說說行轉列的方法,這個就比較好想了,利用拼sql和case when解決即可 實現目的 name nvarchar 10 null,名稱 course nvarcha...

資料庫行列轉換

資料庫中的 要求查詢出的資料 初始化環境 1 建表 create table studentresult name varchar 50 subject varchar 50 result int 2 插入資料 insert into studentresult values 張三 語文 80 in...

玩轉 SQL2005資料庫行列轉換

注意 列轉行的方法可能是我獨創的了,呵呵,因為在網上找不到哦,全部是我自己寫的,用到了系統的syscolumns 一 行轉列的方法 先說說行轉列的方法,這個就比較好想了,利用拼sql和case when解決即可 實現目的 1 建立測試用的資料庫 複製 如下 create table rowtest ...