程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 淺析SQL語句行列轉換的兩種方法 case...when與pivot函數的應用

淺析SQL語句行列轉換的兩種方法 case...when與pivot函數的應用

編輯:關於MYSQL數據庫

/*創建數據庫*/
 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
     )

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved