sql server行列轉換案例
一、行轉列
建表:
if object_id('mytest')is not null drop table mytest
go
create table mytest(姓名 varchar(10),課程 varchar(10),分數 int)
insert into mytest values('小明','化學',86)
insert into mytest values('小明','數學',77)
insert into mytest values('小明','物理',87)
insert into mytest values('小華','化學',86)
insert into mytest values('小華','數學',84)
insert into mytest values('小華','物理',94)
go
select * from mytest
姓名 課程 分數
---------- ---------- -----------
小明 化學 86
小明 數學 77
小明 物理 87
小華 化學 86
小華 數學 84
小華 物理 94
(6 行受影響)
現在的問題是:我想根據姓名統計這個人的三門成績,即:姓名 化學 數學 物理
首先看看使用case when end結構的時候:
select 姓名,
max(case 課程 when '化學' then 分數 else 0 end) 化學,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理
from mytest
group by 姓名
姓名 化學 數學 物理
---------- ----------- ----------- -----------
小華 86 84 94
小明 86 77 87
(2 行受影響)
這個結果就是我們想要的,然後再看看使用pivot:
select * from mytest pivot(max(分數) for 課程 in (化學,數學,物理))a
姓名 化學 數學 物理
---------- ----------- ----------- -----------
小華 86 84 94
小明 86 77 87
(2 行受影響)
求出平均分、總分:
select 姓名,
max(case 課程 when '化學' then 分數 else 0 end) 化學,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理,
sum(分數) 總分,
cast(avg(分數*1.0) as decimal(18,2)) 平均分
from mytest
group by 姓名
姓名 化學 數學 物理 總分 平均分
---------- ----------- ----------- ----------- --------- ---------
小華 86 84 94 264 88.00
小明 86 77 87 250 83.33
二、列轉行
1、建立表格
if object_id('mytest') is not null
drop table mytest
go
create table mytest(姓名 varchar(10),化學 int,數學 int,物理 int)
insert into mytest values('小明',86,77,87)
insert into mytest values('小華',86,84,94)
go
select * from mytest
go
姓名 化學 數學 物理
---------- ----------- ----------- -----------
小明 86 77 87
小華 86 84 94
使用SQL Server 2005靜態SQL
select 姓名,課程,分數 from mytest unpivot (分數 for 課程 in([化學],[數學],[物理])) t
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-2126624/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql server 行列轉換SQLServer
- SQL Server中行列轉換 Pivot UnPivotSQLServer
- 行列轉換sqlSQL
- SQL Server 實現行列(縱橫表)轉換SQLServer
- SQL Server 2005之PIVOT/UNPIVOT行列轉換(轉)SQLServer
- 【SQL 學習】行列轉換SQL
- 【SQL】行列轉換方法示例SQL
- oracle11g pivot 行列轉換 SQL Server 2005OracleSQLServer
- 在SQL Server 2005中實現表的行列轉換SQLServer
- sql 實現表的行列轉換SQL
- Oracle--SQL行列轉換實戰OracleSQL
- 行列轉換
- Kettle行列轉換
- 偽行列轉換!
- 【SQL 分析函式】wm_concat 行列轉換SQL函式
- 行列轉換 交叉表 (轉)
- sql server型別轉換SQLServer型別
- SQL Server 2005下的行列轉化(簡單)SQLServer
- Oracle-行列轉換Oracle
- MySQL行列轉換拼接MySql
- 行列轉換之大全~~~
- oracle行列轉換-多行轉換成字串Oracle字串
- 行列轉換,列行轉換統計
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- mysql行列轉換詳解MySql
- Oracle 行列轉換 經典Oracle
- Oracle 行列轉換總結Oracle
- Oracle 行列轉換小結Oracle
- Oracle行列轉換總結Oracle
- Shell練習 行列轉換
- 複雜的行列轉換
- oracle行列轉換-字串轉換成多列Oracle字串
- oracle行列轉換-多列轉換成字串Oracle字串
- 記錄一個行列轉換
- 通用的行列轉換的方法
- 行列轉換問題總結
- oracle和mysql的行列轉換OracleMySql