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