資料分析經常會遇到行列轉換,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 ...