SQL語句行列轉換兩種方法 case ...when 和pivot函數應用SQL語句行列轉換兩種方法 case ...when
和pivot函數應用,運用pivot 函數只支持數據庫版本2005以上的。通常運用case when else end 的方法
比較多,比較廣泛。 數據庫
/*建立數據庫*/
CREATE DATABASE tmp
go
USE tmp
go 函數
/*建立數據庫測試表*/ 測試
CREATE TABLE [Scores]
(
[ID] INT IDENTITY(1, 1)
PRIMARY KEY ,
[Student] VARCHAR(20) ,
[Subject] VARCHAR(30) ,
[Score] FLOAT
) spa
go test
TRUNCATE TABLE Scores
/*插入數據庫測試數據信息*/
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'test001', '語文', '90' )
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'test001', '英語', '85' )
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'text002', '語文', '90' )
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'text002', '英語', '80' )
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'test003', '語文', '95' )
INSERT INTO Scores
( Student, Subject, Score )
VALUES ( 'test003', '英語', '85' ) 方法
/*1. case when .......then else ....end 用法,行列轉換*/
SELECT Student AS '姓名' ,
MAX(CASE Subject
WHEN '語文' THEN Score
ELSE 0
END) AS '語文' ,--若是這個行是「語文」,就選此行做爲列
MAX(CASE Subject
WHEN '英語' THEN Score
ELSE 0
END) AS '英語'
FROM Scores
GROUP BY Student
ORDER BY Student 數據
/*2. pivot(聚合函數(要轉成列值的列名)
for 要轉換的列
in(目標列名)
)*/ 英語
SELECT Student AS '姓名' ,
AVG(語文) AS '語文' ,
AVG(英語) AS '英語'
FROM Scores PIVOT( AVG(Score) FOR Subject IN ( 語文, 英語 ) )as NewScores
GROUP BY Student
ORDER BY Student ASC co