在不知道PIVOT关系运算符的用法之前,我们通过聚合函数配合CASE……WHEN的写法来实现相应的功能,微软在Sql Server 2005以及更高版本中提供能PIVOT关系运算符,POVIT提供的语法比一系列的SELECT……CASE语句中所指定的语法更简单和更具可读性。

POVIT的完整语法:

table_source PIVOT(聚合函数() FOR pivot_column IN())  as

接下来我们通过SELECT…CASE和PIVOT两种语法,来完成行转列的功能。

示例:

1、创建表

if object_id('tb') is not null drop tabletbgo

create table tb(编号 int,姓名 varchar(10),课程 varchar(10),分数 int)go

insert into tb values(1,'张三','语文',74)insert into tb values(2,'张三','数学',83)insert into tb values(3,'张三','物理',93)insert into tb values(4,'李四','语文',74)insert into tb values(5,'李四','数学',84)insert into tb values(6,'李四','物理',94)go

select * from tb

结果:

2、SELECT…CASE写法

select姓名,max(case when 课程='语文' then 分数 end) as语文,max(case when 课程='数学' then 分数 end) as数学,max(case when 课程='物理' then 分数 end) as物理from tb group by 姓名

结果:

3、PIVOT写法

select * from (select 姓名,课程,分数 from tb) as t pivot(max(分数) for 课程 in(语文,数学,物理)) asp--分数(聚合列) --课程(转换列)

结果:

PIVOT有个郁闷的问题就是没有办法指定分组列,经过测试发现PIVOT是以除聚合列和转换列以外的所有列作为分组列,通过示例来演示我们的猜测

select 姓名,语文,数学,物理 from tb pivot(max(分数) for 课程 in(语文,数学,物理)) as p

结果:

UNPIVOT用于将列转为行,列转行相对简单很多,通常我们可以通过UNOIN ALL来实现

UNPIVOT语法:table_source PIVOT( FOR pivot_column IN())  as

示例:

1、创建表

if object_id('tb') is not null drop tabletbgo

create table tb(姓名 varchar(10),语文 int,数学 int,物理 int)insert into tb values('张三',74,83,93)insert into tb values('李四',74,84,94)go

select * from tb

结果:

2、UNION ALL写法

select * from(select 姓名,'语文' as 课程,语文 as 分数 fromtbunion all

select 姓名,'数学' as 课程,数学 as 分数 fromtbunion all

select 姓名,'物理' as 课程,物理 as 分数 fromtb

)as t order by 姓名

结果:

3、UNPIVOT写法

select * from tb unpivot(分数 for 课程 in(语文,数学,物理)) as t

结果:

总结:之前也有一次用到PIVOT,结果在最近写代码的时候想不起来怎么写了,今天将PIVOT和UNPIVOT的详细用法记录下来,希望能够牢牢记住,好记性不如烂笔头嘛

mysql 列转行 unpivot_T-Sql语法:行转列(pivot)和列转行(unpivot)相关推荐

  1. 【MySQL之MySQL底层分析篇】系统学习MySQL,从应用SQL语法到底层知识讲解,这将是你见过最完成的知识体系

    文章目录 MySQL体系结构 MySQL存储结构(以InnoDB为例) MySQL执行流程(以InnoDB为例) 1. 数据写入原理 2. 数据查询原理 MySQL存储引擎 1. 为什么需要不同的存储 ...

  2. MySQL 安装到基础 SQL 语法

    2021-1-3 ~ 2021-1-6 本文比较长,这也是我第一次尝试发长篇博客(24000余字),本文会从MySQL的安装到SQL语言基础,带你入门数据库,如果觉得对你有帮助的话,点个赞,点个关注吧 ...

  3. 修改所有列_哪些数据库是行存储?哪些是列存储?有什么区别?

    大多数数据库系统存储一组数据记录,这些记录由表中的列和行组成.字段是列和行的交集:某种类型的单个值. 属于同一列的字段通常具有相同的数据类型.例如,如果我们定义了一个包含用户数据的表,那么所有的用户名 ...

  4. mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等...

    查看默认的sql mode模式: select @@sql_mode; 我的数据库是: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTI ...

  5. MySQL prepare语句的SQL语法

    MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name ...

  6. MySQL与MongoDB之SQL语法对比

    转载于:https://www.cnblogs.com/keke3399/archive/2012/08/07/2627030.html

  7. mysql启动时执行sql server_常见 mysql 启动、运行.sql 文件错误处理

    1.mysql 启动错误处理 查看 log: Mac: /usr/local/var/mysql/lizhendeMacBook-Pro.local.err 根据 log 针对性的进行调整,包治百病 ...

  8. mysql 交叉表行转列_Oracle行转列、列转行的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现 SQL Code selectconcat(id,username)strfromapp_user selectid||usernames ...

  9. mysql 复杂行转列_有趣的SQL(四) 行转列的复杂应用和优化思想

    原标题:有趣的SQL(四) 行转列的复杂应用和优化思想 导读 本文节选自松华老师<SQL优化专栏> 大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章:有趣的SQL ...

  10. mysql 复杂行转列_有趣的SQL(4) 行转列的复杂应用和优化思想

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章中,有意思的SQL(3) 行转列,列转行和复制 已经给大家介绍了,行转列,列转行,复制等方法. 在这篇文章中,对其进行更深一层 ...

最新文章

  1. Ubuntu 14.04 64bit上curl-7.37源码包中的sample 源码示例研究
  2. SpringCloud Eureka初体验
  3. springboot-springSecurity 之 http Basic认证 (四)
  4. 环境搭建:如何配置 vscode 远程开发 + 免密登录
  5. Android 根据Uri删除文件
  6. asp.net core 系列之Startup
  7. [C++STL]C++实现vector容器
  8. wordpress主题的样式修改
  9. Java编程思想—第八九章
  10. 百度愚人节恶搞背后的趋势
  11. 数学 - 线性代数导论 - #9 Ax=b的解:存在性、解法、解的结构、解的数量
  12. Nginx编译-安装-配置-优化实践总结
  13. 求100以内的所有素数
  14. linux怎么更改兼容模式,SketchUp兼容性更改
  15. 74ls20设计半加器_组合逻辑电路(半加器全加器及逻辑运算)实验报告
  16. 刘潇翔:基于OpenHarmony的仿生四足狗开发分享
  17. Git 和Bitbucket
  18. access的否定形式_雅思考试对于新手有多难?
  19. python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...
  20. 在线API文档、技术文档工具ShowDoc

热门文章

  1. 超级计算机600字作文,超越自己作文600字(精选5篇)
  2. kali更新源及更新系统。
  3. 华润MMX链上云详解
  4. layui 数据表格 分页 搜索 checkbox 缓存选中项数据
  5. webapck运行报错- css-loader minimize
  6. 2021年安全员-B证最新解析及安全员-B证新版试题
  7. E-R模型和E-R图
  8. 网站创建:必要探听的域名和空间相关知识
  9. python xlrd用法_python3 xlrd包的用法
  10. 怎么给拍摄好的视频添加视频或图片背景