it编程 > 数据库 > MsSqlserver

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

22人参与 2025-05-18 MsSqlserver

引言

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

一、pivot:将行转换为列

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

核心作用

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

语法结构

select [非透视列], [透视列1], [透视列2], ...
from (
    select [列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);
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;

输出结果

二、unpivot:将列转换为行

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

核心作用

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

语法结构

select [非透视列], [属性列], [值列]
from 表
unpivot (
    值列 for 属性列 in ([列1], [列2], ...)
) as 别名;

实战示例

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

create table #pivotedsales (
    department varchar(50),
    q1 decimal(10,2),
    q2 decimal(10,2),
    q3 decimal(10,2),
    q4 decimal(10,2)
);

insert into #pivotedsales values
('hr', 20000, 22000, null, null),
('it', 35000, null, 41000, null);
select department, quarter, amount
from #pivotedsales
unpivot (
    amount for quarter in (q1, q2, q3, q4)
) as unpvt;

输出结果

三、关键注意事项

四、典型应用场景对比

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

五、总结

到此这篇关于sql server中的pivot与unpivot用法具体示例的文章就介绍到这了,更多相关sqlserver pivot与unpivot用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

oracle加字段和字段注释sql语句示例代码

05-18

Oralce数据库健康和性能巡检监控的25个SQL脚本

05-18

SQLMesh 模型管理指南从创建到验证的实践记录

05-18

一文详解PostgreSQL复制参数

05-18

PostgreSQL 中 VACUUM 操作的锁机制详细对比解析

05-19

PostgreSQL 的 COPY 命令深度解析

05-19

猜你喜欢

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

发表评论