SQL語句行列轉換兩種方法 case ...when 和pivot函數應用


   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

相關文章
相關標籤/搜索