SQL Povit函数使用及实例
PIVOT函数常用于数据的行转列,同时也可以用此函数实现类似于Excel中的数据透视表的效果。
PIVOT函数
PIVOT 函数的基本语法如下:
-- PIVOT 语法
SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,...[最后一个透视的列] AS <列名称>,FROM(<生成数据的 SELECT 查询>) AS <源查询的别名>PIVOT
(<聚合函数>(<要聚合的列>)
FOR[<包含要成为列标题的值的列>]IN ( [第一个透视的列], [第二个透视的列],... [最后一个透视的列])
) AS <透视表的别名>
<可选的 ORDER BY 子句>;
为了更好的解释Povit函数的使用,下面建立一张测试用的临时数据表:
CREATE TABLE #ShoppingCart( [Name] nvarchar(8) NOT NULL, [Category] nvarchar(8) NOT NULL, [TotalPrice] DECIMAL DEFAULT(0) NOT NULL )
INSERT INTO #ShoppingCart([Name],[Category],[TotalPrice])
SELECT '张三','饼干',30 UNION ALL
SELECT '张三','面包',10 UNION ALL
SELECT '张三','果冻',30 UNION ALL
SELECT '李四','饼干',40 UNION ALL
SELECT '李四','面包',20 UNION ALL
SELECT '李四','果冻',20 UNION ALL
SELECT '陈小二','饼干',20 UNION ALL
SELECT '陈小二','饼干',50 UNION ALL
SELECT '陈小二','面包',30 UNION ALL
SELECT '陈小二','果冻',30
生成后的表结构如下:

现在如果需要降此数据进行分类汇总,得到每个人对应类别的价格加总,有如下两种方法:
第一种方法是使用Case when语句计算:
SELECT [Name],
SUM(CASE [Category] WHEN '饼干' THEN [TotalPrice] ELSE 0 END) AS '饼干',
SUM(CASE [Category] WHEN '果冻' THEN [TotalPrice] ELSE 0 END) AS '果冻',
SUM(CASE [Category] WHEN '面包' THEN [TotalPrice] ELSE 0 END) AS '面包'
FROM [#ShoppingCart]
GROUP BY [Name]
第二种方法则是使用povit函数来生成
select * from #ShoppingCart pivot(sum([TotalPrice]) for [Category] in (饼干,果冻,面包)) a
两个语句生成的结果是一致的

注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需满足数据库的兼容级别,需要兼容级别大于90,否则计算出的结果可能会与上面的截图不同。
查询兼容级别语法如下:
SELECT compatibility_level FROM sys.databases WHERE name = '数据库名';
如果你是跟着上述代码生成的测试数据,则数据表是一张临时表,所以对应的数据库名是Tempdb,
SELECT compatibility_level FROM sys.databases WHERE name = 'Tempdb';
修改兼容级别语法如下:
ALTER DATABASE 数据库名 SET COMPATIBILITY_LEVEL = 90(必须是当前数据库版本范围内的兼容级别)
不同数据库版本支持的兼容级别如下:

动态PIVOT行转列
在日常的数据处理中经常会遇到要转化为列字段的数量特别多的情况,这时如果用上面的语句填写要填写非常多的字段,所以需要使用动态代码进行处理
···
–动态PIVOT行转列
DECLARE @sql_str VARCHAR(8000)
DECLARE @sql_col VARCHAR(8000)
SELECT @sql_col = ISNULL(@sql_col + ‘,’,‘’) + QUOTENAME([Category]) FROM #ShoppingCart GROUP BY [Category]–这一句用于选出所有的列标题并加上[]号,然后连接起来
SET @sql_str = ’
SELECT * FROM #ShoppingCart PIVOT
(SUM([TotalPrice]) FOR [Category] IN ( ‘+ @sql_col +’) ) AS pvt’
PRINT (@sql_str)
EXEC (@sql_str)
···
Unpovit函数
UNPIVOT函数,与上述功能相反,把列转成行。我们直接使用WITH关键字把上述PIVOT查询当成源表,然后再使用UNPIVOT关键把它旋转回原来的模样
WITH Pvt AS
(
select * from #ShoppingCart pivot(sum([TotalPrice]) for [Category] in ([饼干],[果冻],[面包])) as a
)
SELECT [Name],[Category],[TotalPrice]
FROM Pvt
UNPIVOT( [TotalPrice] FOR [Category] in ([饼干],[果冻],[面包]) )AS T
结果如下,可以看到如果用PIVOT 执行聚合,并将多行合并为输出中的一行,UNPIVOT就只能输出合并后的一行数据了。 另外PIVOT函数也不会输出值为Null的数据行,所以UNPIVOT 同样也无法复原原始数据中原有的null值

相关文章:
SQL Povit函数使用及实例
PIVOT函数常用于数据的行转列,同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下: -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…...
Lite AD的安装
1、Lite AD的安装及配置 Lite AD流程: (1)创建一个新的Windows 10,安装tools,再安装ITA组件(安装Lite AD会自动安装VAG/VLB) (2)创建一个新的Windows 10,安…...
限流算法之流量控制的平滑之道:滑动时间窗算法
文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中,流量控制是一个重要的组件,用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法,并分析其优缺…...
C语言数据结构——顺序表
(图片由AI生成) 0.前言 在程序设计的世界里,数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起,逐步深入到顺序表的内部结构、分类,最后通过一个实…...
网络安全:守护数字世界的盾牌
在当今数字化的时代,网络已经渗透到我们生活的方方面面。从社交媒体到在线银行,从在线购物到工作文件传输,网络几乎无处不在。然而,随着网络的普及,网络安全问题也日益凸显。那么,如何确保我们的数字资产安…...
vue3hooks的使用
hook是钩子的意思,看到“钩子”是不是就想到了钩子函数?事实上,hooks 还真是函数的一种写法。 vue3 借鉴 react hooks 开发出了 Composition API ,所以也就意味着 Composition API 也能进行自定义封装 hooks。 vue3 中的 hooks …...
elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示
Upload 上传组件的使用 官方文档链接使用el-upload组件上传文件 具体参数说明,如何实现上传、下载、删除等功能获取文件列表进行file-list格式匹配代码 文件展示列表自定义为表格展示 使用的具体参数说明文件大小展示问题(KB/MB)文件下载代码…...
供应链安全项目in-toto开源框架详解
引言:in-toto 是一个开源框架,能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee,TOC)接纳为CNCF孵化项目。 1. 背景 由于…...
自己是如何使用单元测试
前言 自己是如何使用单元测试 进行单元测试能够让我们在编写方法的具体实现代码后,能清晰地看到其是否能实现预期的功能,有助于我们及时修正自己方法中存在的bug,以免在后续使用到某方法时出现意想不到的错误。 一、引入单元测试所使用的依赖…...
第二百七十八回
文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容,本章回中将介绍DropdownMenu组件.闲话休提,让我们一起Talk Flutter吧。 1.…...
Java 内存模型深度解析
优质博文:IT-BLOG-CN 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递&…...
python爬取图片(thumbURL和html文件标签分别爬取)
当查看源代码,发现网址在thumbURL之后时,用此代码: # 当查看源代码,发现网址在thumbURL之后时,用此代码:import requestsheaders {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121…...
MySQL、Oracle 常用SQL:建表、建视图、数据增删改查、常用condition
目录 1 MySQL、Oracle 建表语句整理1.1 MySQL 建表1.2 Oracle 建表1.3 补充1.3.1 主键:新增、删除1.3.2 字段:新增、修改、删除 2 MySQL、Oracle 建视图3 数据:增删改查3.1 插入数据3.1.1 MySQL、Oracle 插入一条数据3.1.2 MySQL、Oracle 插入…...
Docker(八)高级网络配置
作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 高级网络配置 注意:本章属于 Docker 高级配置,如果您是初学者,您可以暂时跳过本章节,直接学习…...
VUE--- ref refs
ref & refs 的作用:用于获取dom元素或组件实例,也可用于组件组件间数据的获取和修改 ref & refs 与querySelector的区别: ● ref & refs 查找的范围是当前组件内,更加精确稳定 ● querySelector 查找的范围是整个页面…...
微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...
maven导入无法拉取所需依赖
maven导入无法拉取所需依赖 1.原因2.解决搞定收工! 1.原因 公司使用的是gradle,配置的私有云,maven里面配置私有云完全使用不了,无论配置国内还是国外的,导入的项目报错拉不到jar包。 <mirror><id>mirro…...
【2023-08-20】字节跳动秋招笔试四道编程题解
恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。 作者@TechGuide【全网同名】 订阅专栏【进阶版】2023最新大厂笔试真题 & 题解,不容错过的宝藏资源! 第一题:最小交换次数 题目描述 小盖将n个珠子排成一排,然后将它们串…...
VPS网站发布-个人网站搭建与部署-个人简历网站示例-个人简历网站案例-网站推广
文章目录 1. 个人网站搭建指南1.1 网站示例 | 个人网站 | 个人简历模版 | 个人简历网站 | 网站案例1.2 准备工具 2. 网页部署教程(ubuntu)2.1 购买域名2.2 购买VPS2.3 部署工具 Apache || Nginx2.1.1 网页相关文件上传到github库2.1.2 在VPS中执行一键部…...
INTEWORK—PET 汽车软件持续集成平台
产品概述 INTEWORK-PET-CI是经纬恒润自主研发的汽车软件持续集成&持续交付平台,在传统的持续集成基础上深化了研运一体化(DevOps)的概念,将嵌入式软件中的拉取代码、检查、构建、测试、版本管理以及发布交付等环节串联起来&am…...
告别字符串截取!用正则表达式re模块精准提取HTML表格数据的避坑指南
告别字符串截取!用正则表达式re模块精准提取HTML表格数据的避坑指南 在数据抓取的世界里,HTML解析就像一场永无止境的猫鼠游戏。每当开发者费尽心思用字符串截取搞定一个网站,前端工程师稍微调整下标签结构,整个爬虫就崩溃了。这种…...
MarkItDown:文档转换工具的全方位解析与高效应用指南
MarkItDown:文档转换工具的全方位解析与高效应用指南 【免费下载链接】markitdown 将文件和办公文档转换为 Markdown 的 Python 工具 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 在数字化办公与内容创作领域,文档格式转换是连…...
文墨共鸣镜像详解:开箱即用的中文语义相似度分析解决方案
文墨共鸣镜像详解:开箱即用的中文语义相似度分析解决方案 1. 引言:当传统美学遇上现代AI 在信息爆炸的时代,我们每天都要处理大量文本内容。无论是商业文案的比对、学术观点的对照,还是日常交流的理解,快速判断两段文…...
避坑指南:StarRocks聚合模型排序键的5个常见错误配置(含性能对比测试)
StarRocks聚合模型排序键配置实战:从性能陷阱到最佳实践 当电商平台的UV统计查询从3秒延长到30秒,当数据仓库的存储空间以每天10%的速度膨胀,很多团队才意识到——聚合模型的排序键配置出了问题。作为StarRocks最核心的性能杠杆,排…...
LabelImg图像标注工具:从零开始创建AI训练数据的完整指南
LabelImg图像标注工具:从零开始创建AI训练数据的完整指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out…...
SDMatte代码解读:关键模块架构分析与核心算法实现
SDMatte代码解读:关键模块架构分析与核心算法实现 1. 项目背景与核心价值 SDMatte是一个开源的图像抠图工具,基于深度学习技术实现高质量的自动背景分离。相比传统方法,它能够更准确地处理复杂边缘(如头发、透明材质等ÿ…...
R数据可视化进阶|利用Scatterplot3d包打造交互式3D散点图
1. 为什么需要3D散点图可视化 在数据分析工作中,我们经常需要同时观察三个变量之间的关系。传统的2D散点图只能展示两个变量之间的相关性,当我们需要分析三个变量之间的复杂关系时,3D散点图就成为了必不可少的工具。比如在分析鸢尾花数据集时…...
超越跑分:Gemini 3.1 Pro 2026年多维度能力评估体系深度拆解
对于追求精准选型的开发者和研究者而言,评估Gemini 3.1 Pro的真正实力需超越简单问答,而应建立一套涵盖推理、代码、长文本、安全性的多维度评估体系。目前,通过RskAi(www.rsk.cn)等聚合镜像站是国内用户以零成本、直接…...
**基于Python实现脉冲神经网络:从理论到代码的创新实践**在深度
基于Python实现脉冲神经网络:从理论到代码的创新实践 在深度学习飞速发展的今天,传统人工神经网络(ANN)已难以满足对生物可解释性和能效比更高的需求。而**脉冲神经网络(Spiking Neural Networks, SNN)**作…...
CosyVoice集成Java Web应用:构建智能语音播报后端服务
CosyVoice集成Java Web应用:构建智能语音播报后端服务 最近在做一个在线教育平台的项目,需要给课程内容加上语音播报功能。一开始我们试过一些现成的语音合成服务,要么价格太贵,要么声音不够自然。后来发现星图GPU平台上有个Cosy…...
