試用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...