PIVOT函数–行转列[通俗易懂]

PIVOT函数–行转列[通俗易懂]首先我们来看下PIVOT函数的英文翻译:pivot:v在枢轴上旋转(转动)首先声明下PIVOT函数的语法格式为:SELECT[字段1,2,3…]FROM[表名]–将从##TEST表中选出的一些字段作为原表。AS[原表别名]PIVOT([聚合函数]([原表字段1])FOR[原表字段2]IN([原表2值1],[原表字段2值2]…))AS[新表别名]下面以例子讲解PIVOT函数:1、首先建立一个全局临时表–建立一个全局临时表。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

首先我们来看下PIVOT函数的英文翻译:

pivot:v 在枢轴上旋转(转动)

首先声明下PIVOT函数的语法格式为:

SELECT [字段1,2,3…] FROM [表名]    — 将从##TEST表中选出的一些字段作为原表。
AS [原表别名]
PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名]

 

下面以例子讲解PIVOT函数:

1、首先建立一个全局临时表

-- 建立一个全局临时表。临时表还是挺好用的哈,不用写入数据库中,可以用来学习且不用切换数据库
CREATE TABLE ##TEST( 
	project VARCHAR(10), -- 课程 
	student VARCHAR(20), -- 学生
	score DECIMAL        -- 成绩
)
INSERT INTO ##TEST VALUES('语文','小林',85)
INSERT INTO ##TEST VALUES('语文','小龙',89)
INSERT INTO ##TEST VALUES('语文','小龙',98)
INSERT INTO ##TEST VALUES('数学','小林',95)
INSERT INTO ##TEST VALUES('数学','小龙',90)
INSERT INTO ##TEST VALUES('英语','小明',99)
INSERT INTO ##TEST VALUES('英语','小林',97)
INSERT INTO ##TEST VALUES('英语','小龙',98)

SELECT * FROM ##TEST 

Jetbrains全家桶1年46,售后保障稳定

结果如下:

PIVOT函数--行转列[通俗易懂]

然后我们写一个PIVOT用法,来看看它的效果:

SELECT * FROM ##TEST
AS p  -- 将选中的字段作为原表,对应的t表就是新表。
PIVOT(SUM(score) FOR project IN([语文],[数学],[英语])) AS t

PIVOT函数--行转列[通俗易懂]

可能一下看不懂,在本文的开头我们提到PIVOT的英文含义是在枢轴上旋转,上述sql语句中,直译过来就是原表p以project这个单元格作为枢轴,将project这一列逆时针旋转90度,并去重,原来project的行变成了新表t中的列。

这样可能还不能得到我们想要的结果:

你可能会疑问?为什么会出现聚合函数,我们知道,聚合函数是和GROUP BY一起使用的。这是因为除了PIVOT函数里出现的score和project字段外,原表p中的其他字段都将被GROUP BY,作为新表中的行,因为如此,使得PIVOT结果出现多行。

 

补充一点:临时表只能执行一次,会暂时存贮在内存中,要想删除临时表,执行DROP TABLE ##TEST,即可。

 

 

 

 

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

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

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


相关推荐

  • FilterDispatcher处理流程「建议收藏」

    FilterDispatcher处理流程「建议收藏」org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter前身是:org.apache.struts2.dispatcher.FilterDispatcher请求被web.xml中定义的过滤器拦截。3层过滤器处理:ActionContextCleanUp,其他过滤器(OtherFilters,SiteM…

    2022年8月16日
    10
  • 队列的顺序存储结构之循环队列

    队列的顺序存储结构之循环队列一、队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FirstInFirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。如图所示:二、循环队列的引出为了避免当队中只剩一个元素的时候,队头队尾重合使处理变得麻烦。所以我们引入两个指针,front指针指向队头元素,rear指针指向队尾元素…

    2022年5月22日
    42
  • 写一段代码在遍历 ArrayList 时移除一个元素?

    写一段代码在遍历 ArrayList 时移除一个元素?今天楼主继续分享一道经典Java面试题并进行相关知识点的拓展: 上题:写一段代码在遍历ArrayList时移除一个元素?该问题的关键在于面试者使用的是ArrayList的remove()还是Iterator的remove()方法。是使用正确的方式来实现在遍历的过程中移除元素,而不会出现ConcurrentModificationException异常的示例代码。…

    2022年7月22日
    12
  • IDEA注释快捷键[通俗易懂]

    IDEA注释快捷键[通俗易懂]IDEA可以使用快捷键添加行注释Ctrl+/、块注释Ctrl+Shift+/,还可以快速生成类注释、方法注释等,下面就介绍这几种快捷键的用法.[1]行注释Ctrl+/首先你的光标要处于这一行,处于这行的哪个位置都可以,按Ctrl+/,就可以往行首添加”//”,将该行注释掉。再次按Ctrl+/,可以去掉该行注释。[2]块注释Ctrl+Shift+/使用块注释需要先选中要注释的块。…

    2022年8月15日
    30
  • c++入门教程–-20C++ 类成员函数

    c++入门教程–-20C++ 类成员函数

    2021年3月12日
    140
  • 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误[通俗易懂]

    《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误[通俗易懂]资源下载下面是《AndroidStudio开发实战从零基础到App上线(第2版)》一书用到的工具和代码资源:1、本书使用的AndroidStudio版本为3.2,最新的安装包可前往Android官网页面下载。2、本书使用的AndroidNDK版本为r17,最新的安装包可前往Android官网页面下载。3、本书提供所有示例源码的demo工程下载,源码(适配Android4.1到9….

    2022年5月30日
    38

发表回复

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

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