sqlserver PIVOT和UNPIVOT使用

2023-10-24 09:48

本文主要是介绍sqlserver PIVOT和UNPIVOT使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、使用PIVOT和UNPIVOT命令的SQL Server版本要求

1.数据库的最低版本要求为SQL Server 2005 或更高。

2.必须将数据库的兼容级别设置为90 或更高。

3.查看我的数据库版本及兼容级别。

查看本版本命令:print @@version

使用PIVOT 实现数据表的列转行

1.在这里我们先构建一个测试数据表(这里使用的是临时表,以方便我们在退出会话的时候自动删除表及其数据)

首先我们先设计一个表架构为#Student { 学生编号[PK],  姓名, 性别, 所属班级 }的表,然后编写如下T-SQL

表结构:

CREATE TABLE #Student (  
 
[学生编号] INT IDENTITY(1, 1) PRIMARY KEY,  
 
[姓名] NVARCHAR(20),  
 
[性别] NVARCHAR(1),  
 
[所属班级] NVARCHAR(20)  
 
); 

插入数据
INSERT INTO #Student (  
 
[姓名], [性别], [所属班级]  
 
)  
 
SELECT '李妹妹', '女', '初一 1班' UNION ALL  
 
SELECT '泰强', '男', '初一 1班' UNION ALL  
 
SELECT '泰映', '男', '初一 1班' UNION ALL  
 
SELECT '何谢', '男', '初一 1班' UNION ALL  
 
SELECT '李春', '男', '初二 1班' UNION ALL  
 
SELECT '吴歌', '男', '初二 1班' UNION ALL  
 
SELECT '林纯', '男', '初二 1班' UNION ALL  
 
SELECT '徐叶', '女', '初二 1班' UNION ALL  
 
SELECT '龙门', '男', '初三 1班' UNION ALL  
 
SELECT '小红', '女', '初三 1班' UNION ALL  
 
SELECT '小李', '男', '初三 1班' UNION ALL  
 
SELECT '小黄', '女', '初三 2班' UNION ALL  
 
SELECT '旺财', '男', '初三 2班' UNION ALL  
 
SELECT '强强', '男', '初二 1班'; 

2.查询各班级的总人数

SELECT  
 
[所属班级] AS [班级],  
 
COUNT(1) AS [人数]  
 
FROM #Student  
 
GROUP BY [所属班级]  
 
ORDER BY [人数] DESC 


把上面的表{ 班级, 人数 } 由 班级[行] 的显示转换为 班级[列] 的显示格式!

在此你会看到第一个PIVOT示例。

3.编写第一个PIVOT示例

SELECT  
 
'班级总人数:' AS [总人数],  
 
[初一 1班], [初一 2班],  
 
[初二 1班],  
 
[初三 1班], [初三 2班]  
 
FROM (  
 
SELECT  
 
[所属班级] AS [班级],  
 
[学生编号]  
 
FROM #Student  
 
) AS [SourceTable]  
 
PIVOT (  
 
COUNT([学生编号])  
 
FOR [班级] IN (  
 
[初一 1班], [初一 2班],  
 
[初二 1班],  
 
[初三 1班], [初三 2班]  
 
)  
 
) AS [PivotTable] 


这篇关于sqlserver PIVOT和UNPIVOT使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274328

相关文章

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php