SQL Server中的PIVOT与UNPIVOT用法具体示例详解

2025-05-18 02:50

本文主要是介绍SQL Server中的PIVOT与UNPIVOT用法具体示例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U...

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

引言

在数据分析与报表生成场景中,行列转换是一个高频需求。SQL Server 提供了 PIVOT 和 UNPIVOT 两个强大的运算符,能够帮助我们快速实现数据透视与逆透视操作。本文将结合具体示例,解析它们的核心用法。

一、PIVOT:将行转换为列

PIVOT函数主要是用来将数据从行转换成列。比如,如果有订单数据表,里面有很多订单的信息,可能按客户ID、订单日期等分组。使用PIVOT可以把这些重复的客户信息排列成一个更紧凑的表格,每个客户的订单日期变成一列,这样看起来更直观。

核心作用

将某一列的唯一值作为新列名,并按需聚合关联数据。

语法结构

SELECT [非透视列], [透视列1], [透视列2], ...
FROM (
    SELEChina编程CT [列1], [列2], [聚合列] 
    FROM 表
) AS 源表
PIVOT (
    聚合函数(聚合列)
    FOR [目标列] IN ([透视值1], [透视值2], ...)
) AS 别名;

实战示例

场景:统计各部门在不同季度的销售额。

  • 准备数据
CREATE TABLE #Sales (
    Department VARCHAR(50),
    Quarter CHAR(2),
    Amount DECIMAL(10,2)
);

INSERT INTO #Sales VALUES
('HR', 'Q1', 20000),
('HR', 'Q2', 22000),
('IT', 'Q1', 35000),
('IT', 'Q3', 41000);
  • 执行 PIVOT
SELECT Department, [Q1], [Q2], [Q3], [Q4]
FROM (
    SELECT Department, Quarter, Amount 
    FROM #Sales
) AS Src
PIVOT (
    SUM(Amount)
    FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS Pvt;

输出结果

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

二、UNPIVOT:将列转换为行

UNPIVOT函数,它的作用和PIVOT相反,是用来把数据从列转换回行。比如,在PIVOT之后得到的一张表格里,如果需要进一步细分数据或者进行其他操作,可以用UNPIVOT来恢复原来的多行结构。

核心作用

将多列合并为两列(属性名+属性值),实现数据逆向透视。

语法结构

SELECT [非透视列], [属性列], [值列]
FROM 表
UNPIVOT (
    值列 FOR 属性列 IN ([列1], [列2], ...)
) AS 别名;

实战示例

场景:将季度销售额列还原为行结构。

  • 使用之前 PIVOT 的结果作为输入
CREATE TABLE #PivotedSales (
    Department VARCHAR(50),
    Q1 DECIMAL(10,2),
    Q2 DECIMAL(10,2编程China编程),
    Q3 DECIMAL(10,2),
    Q4 DECIMAL(10,2)
);

INSERT INTO #PivotedSales VALUES
('HR', 20000, 22000, NULL, NULL),
('IT', 35000, NULL, 41000, NULL);
  • 执行 UNPIVOT
SELECT Department, Quarter, Amount
FROM #PivotedSales
UNPIVOT (
    Amount FOR Quarter IN (Q1, Q2, Q3, Q4)
) AS Unpvt;

输出结果

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

三、关键注意事项

  • 数据类型一致性UNPIVOT 的所有列必须具有兼容的数据类型。

  • 处理 NULL 值PIVOT 会自动过滤 NULL 值,可通过 ISNULL() 或 COALESCE() 预处理。

  • 动态列处理当透视列值不固定时,需使用动态 SQL 拼接列名(示例需另写代码实现)。

  • 性能优化对大型数据集建议建立合适索引,避免全表扫描。

四、典型应用场景对比

操作适用场景示例
PIVOT生成交叉报表、统计类报表部门季度销售汇总
UNPIVOT数据规范化、ETL预处理、存储优化将多个月份列合并为日期维度

五、总结

  • PIVOT 通过聚合实现行转列,适合制作汇总视图
  • UNPIVOT 通过逆向操作恢复数据结构,适合数据清洗
  • 二者配合使用可完成复杂数据转换需求

到此这篇关于SQL Server中的PIVandroidOT与UNPIVOT用法具体示例的文章就介绍到这www.chinasem.cn了,更多相关SQLServer PIVOT与UNPIVOT用法内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于SQL Server中的PIVOT与UNPIVOT用法具体示例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta