淺析SQL語句行列轉換的兩種方法 case...when與pivot函數的應用
/*創(chuàng)建數據庫*/
CREATE DATABASE tmp
go
USE tmp
go
/*創(chuàng)建數據庫測試表*/
CREATE TABLE [Scores]
(
[ID] INT IDENTITY(1, 1)
PRIMARY KEY ,
[Student] VARCHAR(20) ,
[Subject] VARCHAR(30) ,
[Score] FLOAT
)
go
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
相關文章
MySQL計劃任務(事件調度器) Event Scheduler介紹
MySQL5.1.x版本中引入了一項新特性EVENT,顧名思義就是事件、定時任務機制,在指定的時間單元內執(zhí)行特定的任務,因此今后一些對數據定時性操作不再依賴外部程序,而直接使用數據庫本身提供的功能2013-10-10mysql 發(fā)生系統(tǒng)錯誤1067的解決方法
今天要把WEB項目打包成EXE,可是在數據庫上卡住了。在啟動數據庫服務的時候發(fā)生系統(tǒng)錯誤 1067。2009-09-09MySQL降權運行之MySQL以Guests帳戶啟動設置方法
我們在windows服務器中使用mysql數據的時候,mysql默認都是以system權限運行,如果出現(xiàn)了安全問題,黑客就可以通過mysql提權新建用戶什么的,所以mysql低權限運行非常必要2014-07-07