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行数,顾名思义,一个是“行转列”另一个就是“列转行”,好了,这个函数的使用方法我会在下一篇介绍~~


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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • oracle linux 设置ip[通俗易懂]

    oracle linux 设置ip[通俗易懂]1.ifconfig查看网卡是否启动(两个一个127.0.0.1)2.若只是一个查看所有网卡 ifconfig-a 获取未启动的网卡名3.启动网卡 ifconfigeht0up 注: eht0;未启动的网卡名4.修改网卡配置文件eth0 1.修改/etc/sysconfig/network-scripts/etho文件 参数详解 …

  • 滑动窗口算法通用思想

    滑动窗口算法通用思想本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道难度较大的子字符串匹配问题:最小覆盖子串找到字符串中所有字母异位词无重复字符的最长子串最后抽象出一个简单的滑动窗口算法框架。LeetCode上至少有9道题目可以用此方法高效解决。但是有几道是VIP题目,有几道题目虽不难但太复杂,所以本文只选择点赞最高,较为经典的,最能够讲明白的三道题来讲解。第一题为了让读者掌握算法模…

    2022年10月29日
  • Python网络编程之基于socket实现聊天机器人

    Python网络编程之基于socket实现聊天机器人

  • java什么是重写什么是重载_方法的重写和重载

    java什么是重写什么是重载_方法的重写和重载重写和重载的区别一.重写1.重写概念重写是父类与子类中的多态性,子类可以继承父类中的方法并进行重写,但是要保证几点没有变1)方法返回值类型不变2)参数列表不变3)方法名不变满足了这三点之后,子类中父类的方法就被覆盖了,如果想要调用父类的方法,用super关键字2.重写规则重写也是有一定的规则的,否则会报错重写规则:1)参数列表必须完全与被重写的方法相同;2)返回类型必须一直与被重写的方法相同;3)访问修饰符的权限一定要大于等于父类方法的访问修饰符;4)重写方法一定不能抛出

  • 1分钟搞定 OneNote自己账号扩容到15G永久免费空间「建议收藏」

    1分钟搞定 OneNote自己账号扩容到15G永久免费空间「建议收藏」本文是众多使用技巧中其中的一篇,全部使用技巧点击链接查看,或直接查看本专栏其他文章,保证你收获满满我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题,有兴趣的可以去我的主页了解更多计算机学科的精品思维导图整理本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!本文提到的所有软件和工具,可关注公众号一起学计算机点击资源获取获得感觉作者写的不错的,别忘了点赞关注加收藏哦(一键三连)!你的支持会带给我…

  • powerdesigner创建数据库模型(概念模型举例)

    1.启动PowerDesigner(我用的PowerDesigner16.7破解版)选择新建概念模型进行数据库设计的E-R模型辅助设计2.概念模型的设计实体:选择实体图形,在“图纸”点击划出实体来,双击为其命名,选择Attributes添加其所有属性。注意所有的name都可以用中文标示,以好理解;但是code必须用英文标示,以方便库的操作处理(PowerDesigner转化数据库.sql文件,所有的表名称,属性等都采用code)。为每个属性命名,并选择相应的数据类型,PowerDesigner

发表回复

您的电子邮箱地址不会被公开。

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