signed

QiShunwang

“诚信为本、客户至上”

浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用

2021/6/3 18:40:36   来源:

/*创建数据库*/
 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

您可能感兴趣的文章:
  • MySQL 的CASE WHEN 语句使用说明
  • SQL集合函数中case when then 使用技巧
  • sql学习之CASE WHEN THEN ELSE END的用法
  • MySQL的CASE WHEN语句的几个使用实例
  • MySQL中使用case when 语句实现多条件查询的方法
  • sql 中 case when 语法使用方法
  • sum(case when then)(判断男女生的个数)
  • mysql case when group by 实例详解
  • 关于case when语句的报错问题详解
  • MySQL排序中使用CASE WHEN的方法示例