当前位置: 首页 > news >正文

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函数常用于数据的行转列&#xff0c;同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下&#xff1a; -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…...

Lite AD的安装

1、Lite AD的安装及配置 Lite AD流程&#xff1a; &#xff08;1&#xff09;创建一个新的Windows 10&#xff0c;安装tools&#xff0c;再安装ITA组件&#xff08;安装Lite AD会自动安装VAG/VLB&#xff09; &#xff08;2&#xff09;创建一个新的Windows 10&#xff0c;安…...

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中&#xff0c;流量控制是一个重要的组件&#xff0c;用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法&#xff0c;并分析其优缺…...

C语言数据结构——顺序表

&#xff08;图片由AI生成&#xff09; 0.前言 在程序设计的世界里&#xff0c;数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起&#xff0c;逐步深入到顺序表的内部结构、分类&#xff0c;最后通过一个实…...

网络安全:守护数字世界的盾牌

在当今数字化的时代&#xff0c;网络已经渗透到我们生活的方方面面。从社交媒体到在线银行&#xff0c;从在线购物到工作文件传输&#xff0c;网络几乎无处不在。然而&#xff0c;随着网络的普及&#xff0c;网络安全问题也日益凸显。那么&#xff0c;如何确保我们的数字资产安…...

vue3hooks的使用

hook是钩子的意思&#xff0c;看到“钩子”是不是就想到了钩子函数&#xff1f;事实上&#xff0c;hooks 还真是函数的一种写法。 vue3 借鉴 react hooks 开发出了 Composition API &#xff0c;所以也就意味着 Composition API 也能进行自定义封装 hooks。 vue3 中的 hooks …...

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

Upload 上传组件的使用 官方文档链接使用el-upload组件上传文件 具体参数说明&#xff0c;如何实现上传、下载、删除等功能获取文件列表进行file-list格式匹配代码 文件展示列表自定义为表格展示 使用的具体参数说明文件大小展示问题&#xff08;KB/MB&#xff09;文件下载代码…...

供应链安全项目in-toto开源框架详解

引言&#xff1a;in-toto 是一个开源框架&#xff0c;能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee&#xff0c;TOC)接纳为CNCF孵化项目。 1. 背景 由于…...

自己是如何使用单元测试

前言 自己是如何使用单元测试 进行单元测试能够让我们在编写方法的具体实现代码后&#xff0c;能清晰地看到其是否能实现预期的功能&#xff0c;有助于我们及时修正自己方法中存在的bug&#xff0c;以免在后续使用到某方法时出现意想不到的错误。 一、引入单元测试所使用的依赖…...

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…...

Java 内存模型深度解析

优质博文&#xff1a;IT-BLOG-CN 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题&#xff1a;线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中&#xff0c;线程之间的通信机制有两种&#xff1a;内存共享和消息传递&…...

python爬取图片(thumbURL和html文件标签分别爬取)

当查看源代码&#xff0c;发现网址在thumbURL之后时&#xff0c;用此代码: # 当查看源代码&#xff0c;发现网址在thumbURL之后时&#xff0c;用此代码: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 主键&#xff1a;新增、删除1.3.2 字段&#xff1a;新增、修改、删除 2 MySQL、Oracle 建视图3 数据&#xff1a;增删改查3.1 插入数据3.1.1 MySQL、Oracle 插入一条数据3.1.2 MySQL、Oracle 插入…...

Docker(八)高级网络配置

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 高级网络配置 注意&#xff1a;本章属于 Docker 高级配置&#xff0c;如果您是初学者&#xff0c;您可以暂时跳过本章节&#xff0c;直接学习…...

VUE--- ref refs

ref & refs 的作用&#xff1a;用于获取dom元素或组件实例&#xff0c;也可用于组件组件间数据的获取和修改 ref & refs 与querySelector的区别&#xff1a; ● ref & refs 查找的范围是当前组件内&#xff0c;更加精确稳定 ● querySelector 查找的范围是整个页面…...

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

maven导入无法拉取所需依赖

maven导入无法拉取所需依赖 1.原因2.解决搞定收工&#xff01; 1.原因 公司使用的是gradle&#xff0c;配置的私有云&#xff0c;maven里面配置私有云完全使用不了&#xff0c;无论配置国内还是国外的&#xff0c;导入的项目报错拉不到jar包。 <mirror><id>mirro…...

【2023-08-20】字节跳动秋招笔试四道编程题解

恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。 作者@TechGuide【全网同名】 订阅专栏【进阶版】2023最新大厂笔试真题 & 题解,不容错过的宝藏资源! 第一题:最小交换次数 题目描述 小盖将n个珠子排成一排,然后将它们串…...

VPS网站发布-个人网站搭建与部署-个人简历网站示例-个人简历网站案例-网站推广

文章目录 1. 个人网站搭建指南1.1 网站示例 | 个人网站 | 个人简历模版 | 个人简历网站 | 网站案例1.2 准备工具 2. 网页部署教程&#xff08;ubuntu&#xff09;2.1 购买域名2.2 购买VPS2.3 部署工具 Apache || Nginx2.1.1 网页相关文件上传到github库2.1.2 在VPS中执行一键部…...

INTEWORK—PET 汽车软件持续集成平台

产品概述 INTEWORK-PET-CI是经纬恒润自主研发的汽车软件持续集成&持续交付平台&#xff0c;在传统的持续集成基础上深化了研运一体化&#xff08;DevOps&#xff09;的概念&#xff0c;将嵌入式软件中的拉取代码、检查、构建、测试、版本管理以及发布交付等环节串联起来&am…...

我的MIPS五段流水CPU踩坑实录:从Load-Use Hazard到数据前递的完整调试过程

我的MIPS五段流水CPU踩坑实录&#xff1a;从Load-Use Hazard到数据前递的完整调试过程 1. 当流水线遇上数据冒险&#xff1a;一个FPGA初学者的崩溃瞬间 那是一个凌晨三点&#xff0c;我的Verilog仿真波形图上突然出现了一个诡异的数值——寄存器R9被意外写入了0。作为计算机体系…...

从缺页异常看Linux内存管理的基石:写时复制、延迟分配与交换机制

从缺页异常看Linux内存管理的基石&#xff1a;写时复制、延迟分配与交换机制 当你在Linux终端敲下./a.out时&#xff0c;内核如何将磁盘上的程序转化为内存中的鲜活进程&#xff1f;这个看似简单的过程背后&#xff0c;隐藏着一套精妙的内存管理机制。缺页异常&#xff08;Page…...

如何判断杉木桩品牌的选型标准?

开篇即明&#xff1a;本文仅输出选型方法&#xff0c;不推荐任何具体产品。杉木桩作为园林、水利、建筑等领域的常用材料&#xff0c;其质量直接关系工程安全与寿命。从业十余年&#xff0c;我始终认为&#xff1a;选型需回归标准&#xff0c;而非品牌名称。以下从四个核心维度…...

避坑指南:在ArcGIS中提取DEM高程点,为什么导入Global Mapper后看不到高度?

避坑指南&#xff1a;ArcGIS与Global Mapper高程数据互操作的核心陷阱与解决方案 当你第一次将精心处理的DEM高程点从ArcGIS导入Global Mapper&#xff0c;期待看到起伏有致的三维地形时&#xff0c;却发现所有点都"躺平"在二维平面上——这种挫败感我深有体会。这不…...

为什么所有人都在聊RAG?看这篇,小白也能彻底搞懂

你是否有过这样的经历——你满怀期待地问 AI 一个专业问题&#xff0c;它流畅地给了你一段"答案"&#xff0c;引经据典、逻辑自洽。 结果一查&#xff0c;发现全是错的。一本正经地胡说八道。 这就是大语言模型&#xff08;LLM&#xff09;的致命短板&#xff1a;它…...

OpenMMLab环境配置避坑指南:从CUDA 11.6到PyTorch 1.13,如何为MMRotate 0.3.4找到对的mmcv-full?

OpenMMLab精准环境配置实战&#xff1a;破解CUDA 11.6与PyTorch 1.13下的mmcv-full匹配困局 当你在RTX 3060显卡上尝试运行MMRotate 0.3.4时&#xff0c;突然发现控制台抛出ImportError: cannot import name get_dist_info from mmcv.runner——这往往是深度学习工程师与OpenMM…...

收藏干货:MySQL/PG/人大金仓/达梦语法差异对照表

&#x1f4cc; 专栏&#xff1a;国产数据库信创实战&#x1f516; 标签&#xff1a; #数据库语法差异 #MySQL转人大金仓 #MySQL转达梦 #PG语法适配 #信创数据库迁移 #SQL兼容改造 #国产数据库适配 #SpringBoot3数据库适配&#x1f4dd; 文章摘要信创国产化迁移过程中&#xff0…...

从星座图乱麻到清晰:手把手教你用OpenOFDM搞定Wi-Fi信号频偏校正

从星座图乱麻到清晰&#xff1a;手把手教你用OpenOFDM搞定Wi-Fi信号频偏校正 当你第一次用软件无线电&#xff08;SDR&#xff09;捕获Wi-Fi信号时&#xff0c;看到的星座图像是被猫抓过的毛线团——杂乱无章的斑点毫无规律地散布在平面上。这种令人沮丧的场景&#xff0c;正是…...

ncmdump终极指南:5分钟解锁网易云音乐NCM加密文件

ncmdump终极指南&#xff1a;5分钟解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲&#xff0c;却发现只能在特定客户端播放&#xff1f;当你想在车载音响、智能音箱…...

不熬夜、不焦虑、不踩坑:用百考通AI 无痛搞定本科毕业论文

它不替你思考&#xff0c;但能帮你扫清写作路上 80% 的障碍 又到一年毕业季&#xff0c;凌晨三点的宿舍里&#xff0c;总有一盏灯还亮着。电脑屏幕上是只写了标题的 Word 文档&#xff0c;旁边散落着被退回三次的开题报告&#xff0c;知网页面开了十几个标签却找不到想要的方向…...