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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql行列轉換詳解MySql
- 記錄一個行列轉換
- sql server 資料型別轉換函式SQLServer資料型別函式
- SQL Server 替換SQLServer
- SQL SERVER 日期格式化、日期和字串轉換SQLServer字串
- Oracle_SQL部分_時間轉換(案例一)OracleSQL
- SQL Server阻塞blocking案例分析SQLServerBloC
- Oracle行列轉換及pivot子句的用法Oracle
- Spark實現行列轉換pivot和unpivotSpark
- SQL 如何實現動態的行列轉置SQL
- SQL Server一次SQL調優案例SQLServer
- Restcloud ETl實踐之資料行列轉換RESTCloud
- SQL Server中datetimeset轉換datetime型別問題淺析SQLServer型別
- 使用vue實現行列轉換的一種方法。Vue
- SQL Server中提前找到隱式轉換提升效能的辦法SQLServer
- [轉帖]見識一下SQL Server隱式轉換處理的不同SQLServer
- sql隱式轉換SQL
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- 例項詳解構建數倉中的行列轉換
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- 在報表中錄入資料時如何實現行列轉換
- Lambda 轉換 SQL ORM 工具 SqlRepoExSQLORM
- DataGear 變更部署資料庫為SQL Server填坑指南(含轉寫後的SQL server程式碼及SQL server配置檔案)資料庫SQLServer
- Oracle SQL_ID轉換成SQL_HASH_VALUEOracleSQL
- sql serverSQLServer
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- 案例分析:700G SQL Server資料庫遷移HGSQLServer資料庫
- SQL Server 匯出Excel有換行的解決方法SQLServerExcel
- SQL Server 2008的故障轉移叢集概述UBSQLServer
- Profinet轉ModbusTCP:從站裝置轉換與整合案例TCP
- 報表如何實現行列互換效果?
- Moebius for SQL ServerSQLServer
- sql server 使用SQLServer
- SQL Server教程SQLServer
- flink將bathch dataset 轉換為sql操作BATSQL
- transqlate:將任何SQL轉換為PostgreSQL方言SQL
- Spark SQL中的RDD與DataFrame轉換SparkSQL
- 鴻蒙NEXT開發案例:溫度轉換鴻蒙
- 實現二維陣列的行列互換陣列