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

 更新时间:2013年08月15日 09:59:05   作者:  
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
     )

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介绍

    MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能
    2013-10-10
  • Centos下Mysql安装图文教程

    Centos下Mysql安装图文教程

    这篇文章主要为大家详细介绍了 Centos下Mysql安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • MySQL COUNT(*)性能原理详解

    MySQL COUNT(*)性能原理详解

    这篇文章主要介绍了MySQL COUNT(*)性能原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • win32 mysql 5.7.27 安装配置方法图文教程

    win32 mysql 5.7.27 安装配置方法图文教程

    这篇文章主要为大家详细介绍了win32 mysql 5.7.27 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • mysql 发生系统错误1067的解决方法

    mysql 发生系统错误1067的解决方法

    今天要把WEB项目打包成EXE,可是在数据库上卡住了。在启动数据库服务的时候发生系统错误 1067。
    2009-09-09
  • 一文教你快速生成MySQL数据库关系图

    一文教你快速生成MySQL数据库关系图

    我们经常会用到一些表的数据库关系图,下面这篇文章主要给大家介绍了关于生成MySQL数据库关系图的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL降权运行之MySQL以Guests帐户启动设置方法

    MySQL降权运行之MySQL以Guests帐户启动设置方法

    我们在windows服务器中使用mysql数据的时候,mysql默认都是以system权限运行,如果出现了安全问题,黑客就可以通过mysql提权新建用户什么的,所以mysql低权限运行非常必要
    2014-07-07
  • MYSQL配置参数优化详解

    MYSQL配置参数优化详解

    MySQL是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验 进行判断,然后设置合理的参数。下面我们了解一下MySQL优化的一些基础
    2018-07-07
  • MySQL排序与分页讲解

    MySQL排序与分页讲解

    这篇文章主要介绍了MySQL排序与分页讲解,使用 ORDER BY 对查询到的数据进行排序操作,按照dept_id的降序排列,salary的升序排列相关展开文章,需要的小伙伴可以参考一下
    2022-01-01
  • MySQL数据库优化详解

    MySQL数据库优化详解

    这篇文章主要介绍了MySQL数据库优化的方方面面,各种小技巧,需要的朋友可以参考下
    2014-08-08

最新评论