sql 行列轉換之關鍵字pivot,unpivot

2022-02-16 10:15:01 字數 2237 閱讀 2379

試用sql關鍵字pivot與unpivot可以簡便快捷實現資料的行列轉換。廢話不多說,直接上**,關於它們的語法請自行msdn。

pivot:

建立表studentscores

set ansi_nulls on go

set quoted_identifier on go

create table [dbo].[studentscores](  [username] [nvarchar](20) null,  [subject] [nvarchar](30) null,  [score] [float] null ) on [primary]

go插入資料

insert into studentscores values('nick','語文',80) insert into studentscores values('nick','數學',90) insert into studentscores values('nick','英語',70) insert into studentscores values('nick','生物',85) insert into studentscores values('kent','語文',80) insert into studentscores values('kent','數學',90) insert into studentscores values('kent','英語',70)

表中資料如下圖:

pivot sql語句如下:

select username,語文 as '語文',數學 as '數學',英語 as '英語',生物 as '生物'

from studentscores

pivot(   

max(score)   for [subject] in   (語文,數學,英語,生物)  

)as t

一般sql語句:

select username,

max(case [subject] when '語文' then score end ) as '語文',

max(case [subject] when '數學' then score end ) as '數學',

max(case [subject] when '英語' then score end ) as '英語',

max(case [subject] when '生物' then score end ) as '生物'

from studentscores group by username

效果圖如下:

unpivot:

unpivot語法與pivot一樣

建立表studentscores1

set ansi_nulls on go

set quoted_identifier on go

create table [dbo].[studentscores1](  [姓名] [nvarchar](50) not null,  [語文] [int] not null,  [數學] [int] not null,  [英語] [int] not null,  [生物] [int] not null ) on [primary]

go插入資料

insert into values('nick',80,90,70,85)

insert into values('kent',80,90,70,0)

表中資料如下圖:

執行unpivot sql語句進行列轉行如下:

select 姓名,學科,成績 from studentscores1

unpivot

成績  for 學科 in  (語文,數學,英語,生物)

)as p

一般sql語句:

select 姓名,'語文' as 學科,max(語文)as 成績 

from studentscores1 group by 姓名

union all

select 姓名,'數學' as 學科,max(數學)as 成績

from studentscores1 group by 姓名

union all

select 姓名,'英語' as 學科,max(英語)as 成績

from studentscores1 group by 姓名

union all

select 姓名,'生物' as 學科,max(生物)as 成績

from studentscores1 group by 姓名

效果圖如下:

SQL學習之關鍵字

as 將as前的關係起乙個別名,在此語句中,可以用別名來代指這個表 select a.from atable as a btable as bis null 在where中使用is null表示這個值是空值 select from table where age is null is not nul...

SQL學習之left join關鍵字

菜鳥教程 sqlleft join關鍵字將左表 table1 所有的行返回,即右表 table2 中沒有匹配。如果右表中沒有匹配,則結果為 null select column name s from table1 left join table2 on table1.column name tab...

SQL 常用關鍵字

create database 建立資料庫 create database my db 建立表 create table user id int 11 not null auto increment,name varchar 50 default null,password varchar 50 d...