sqlserver pivot函数(oracle行列转换函数)

以学生表举个例子,展现学生的各门学科和成绩,我们先新建一张表:CreateTableStudents(Namevarchar(10),SubjectNvarchar(10),Scoreint)InsertintoStudentsSelect’Andy’,’Chiness’,round(60+40*rand(),0)UnionallSelect’Bur

大家好,又见面了,我是你们的朋友全栈君。

以学生表举个例子,展现学生的各门学科和成绩,我们先新建一张表(表中插入测试值的时候用到了rand取随机数,没用过的可以了解下–>
点击打开):
Create Table Students(Name varchar(10), Subject Nvarchar(10),Score int)  
Insert into Students  
Select 'Andy' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Ula' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Lily' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Demon' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Andy' ,'Math',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'Math',round(60+40*rand(),0) Union all  
Select 'Ula' ,'Math',round(60+40*rand(),0) Union all  
Select 'Lily' ,'Math',round(60+40*rand(),0) Union all  
Select 'Demon' ,'Math',round(60+40*rand(),0) Union all    
Select 'Andy' ,'English',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'English',round(60+40*rand(),0) Union all  
Select 'Ula' ,'English',round(60+40*rand(),0) Union all  
Select 'Lily' ,'English',round(60+40*rand(),0) Union all  
Select 'Demon' ,'English',round(60+40*rand(),0)
这张表的呈现形式如下:
sqlserver pivot函数(oracle行列转换函数)
通过行列转换函数:
SELECT * FROM Students
PIVOT(MAX(SCORE) FOR Subject IN(Chiness,Math,English) ) AS PVT
这边需要留意一下PIVOT函数使用的结构了,首先是写一个查询语句,然后是对这个查询结果集中的某一列的值进行了行列转换的操作(我这里是把学科这一列的值“语文、数学、英语”转换为列),其中还必须包含了一个聚集函数(聚集函数一共有5个,分别是:count、sum、max、min、avg,无论是用哪一个聚集函数都代表着不同的意义,我这里用的MAX,针对这里聚集函数的使用我在后面的篇章中有讲到–>
点击打开)
呈现形式如下:
sqlserver pivot函数(oracle行列转换函数)
注:pivot函数前面接的一定是一条查询语句,我上面的这条例子查询语句比较简单,直接select * from 也就通过了,最终结果也没有报错,其实正规来讲,如果select 语句比较复杂,这种写法可能会报错的,下面有一种保险一点的写法:
SELECT * FROM (
–这里写复杂的sql查询语句
) a
PIVOT(–此次省略相关code) AS PVT
之前的例子可以这样写:
SELECT * FROM (
SELECT * FROM Students
) a
PIVOT(MAX(SCORE) FOR Subject IN(Chiness,Math,English) ) AS PVT

最终的执行结果是一样的!


和PIVOT相反的还有一个UNPIVOT行数,顾名思义,一个是“行转列”另一个就是“列转行”,好了,这个函数的使用方法我会在下一篇介绍~~


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129288.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • google earth使用方法_国内使用google earth

    google earth使用方法_国内使用google earth文件 导入是最重要的功能,可以导入路径、图像、模型。 编辑 复制,如果选中路径对象将会复制为KML的XML语言文本。 复制为航迹,可以复制路径,但不清楚用途。 复制图像就是将当前窗口截屏。 复制视图位置会将当前的经纬度以度,分,秒的格式复制到剪贴板。 重命名是为除我的地点、临时位置不可用外,其余的都可以用。 快照视图是所有对象可用的,包括文件夹、地标、图像、路径、游览,只有在左侧窗格选中对象,这个功能才可以用。 按名称排

    2022年9月19日
  • stringutils.isnotempty可以判断null_string方法的使用

    stringutils.isnotempty可以判断null_string方法的使用StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。除了构造器,StringUtils中一共有130多个方法,并且都是stati…

    2022年10月7日
  • navicat注册码最新_navicat激活工具

    navicat注册码最新_navicat激活工具navicat10.1.7版本,亲测可用。名:NAVN-LNXG-XHHX-5NOO组织:NAVN-LNXG-XHHX-5NOO注册码:NAVN-LNXG-XHHX-5NOO

    2022年10月13日
  • nbsp啥意思_UG拆分体

    nbsp啥意思_UG拆分体转载:http://blog.csdn.net/olei_oleitao/article/details/7919307 一、DM36X的BOOT过程介绍DM36x的BOOT过程和DM6446、DM6467完全是一样的,因为都是ARM926EJS架构,里边都有一个RBL,这RBL在芯片出厂的时候都烧写在ROM里,芯片上电复位后RBL在运行,然后读取BOOTMODE引脚的电平状态,决定

    2022年8月13日
  • centos7.2安装rabbitmq和宝塔[通俗易懂]

    centos7.2安装rabbitmq和宝塔[通俗易懂]centos7.2安装rabbitmq和宝塔

    2022年4月23日
  • 生产计划管理软件有哪些?哪个好用_智能生产计划管理

    生产计划管理软件有哪些?哪个好用_智能生产计划管理生产计划管理软件有哪些?哪个好?生产计划管理,一般是指企业对生产活动的计划、组织和控制工作。生产计划管理软件可提高生产效率、提升品质、降低成本等。对企业管理意义深远。​生产计划管理软件介绍:MES制造执行系统​MES系统是一套面向制造企业车间执行层的生产信息化管理系统。是生产工业常见的生产管理软件,他可以为企业提供包括制造数据管理、计划生产调度管理、库存管理以及质量管理,同时还有人力资源管理…

    2022年10月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号