编辑
2025-09-22
SQLSERVER
00

目录

PIVOT操作
实例数据表
使用PIVOT
UNPIVOT操作
使用UNPIVOT
总结

在SQL中,PIVOT和UNPIVOT操作用于旋转表数据,将行转换为列(PIVOT)或将列转换为行(UNPIVOT)。这些操作通常用于数据分析和报告目的,可以帮助我们以更加直观的方式查看和比较数据。

PIVOT操作

PIVOT操作是将特定列的多个唯一值转换成多个列,通常用于聚合数据并将其重新排列成一个由行和列组成的矩阵。

实例数据表

假设我们有一个名为 EmployeeSales 的表,记录了不同员工在不同季度的销售额。

EmployeeIDEmployeeNameQuarterSalesAmount
1JohnQ15000
1JohnQ26000
1JohnQ35500
2JaneQ14500
2JaneQ24800
2JaneQ34700

表结构

SQL
CREATE TABLE EmployeeSales ( EmployeeID INT, EmployeeName VARCHAR(255), Quarter VARCHAR(2), SalesAmount DECIMAL(10, 2), PRIMARY KEY (EmployeeID, Quarter) );

测试数据

SQL
INSERT INTO EmployeeSales (EmployeeID, EmployeeName, Quarter, SalesAmount) VALUES (1, 'John', 'Q1', 5000), (1, 'John', 'Q2', 6000), (1, 'John', 'Q3', 5500), (2, 'Jane', 'Q1', 4500), (2, 'Jane', 'Q2', 4800), (2, 'Jane', 'Q3', 4700);

我们想要一个报告,显示每个员工在每个季度的销售额,但以更易于比较的格式展现。

使用PIVOT

SQL
SELECT EmployeeID, EmployeeName, [Q1], [Q2], [Q3] FROM ( SELECT EmployeeID, EmployeeName, Quarter, SalesAmount FROM EmployeeSales ) AS SourceTable PIVOT ( SUM(SalesAmount) FOR Quarter IN ([Q1], [Q2], [Q3]) ) AS PivotTable;

这个PIVOT操作将 Quarter 列的值转换成了多个列,并对每个季度的 SalesAmount 进行了求和。

结果可能如下:

EmployeeIDEmployeeNameQ1Q2Q3
1John500060005500
2Jane450048004700

image.png

通过这种方式,我们可以很容易地比较不同员工在不同季度的业绩。

UNPIVOT操作

UNPIVOT操作是PIVOT的逆操作,它将列转换为行。这在你需要将通过PIVOT操作生成的矩阵格式数据转换回其原始格式时非常有用。

使用UNPIVOT

以刚才PIVOT操作的结果为例,我们可以使用UNPIVOT将数据转换回原始格式。

将上PIVOT数据保存到表PivotTable 中

SQL
select * into PivotTable from ( SELECT EmployeeID, EmployeeName, [Q1], [Q2], [Q3] FROM ( SELECT EmployeeID, EmployeeName, Quarter, SalesAmount FROM EmployeeSales ) AS SourceTable PIVOT ( SUM(SalesAmount) FOR Quarter IN ([Q1], [Q2], [Q3]) ) AS PivotTable) a

还原数据

SQL
SELECT EmployeeID, EmployeeName, Quarter, SalesAmount FROM ( SELECT EmployeeID, EmployeeName, Q1, Q2, Q3 FROM PivotTable ) AS UnpivotSource UNPIVOT ( SalesAmount FOR Quarter IN (Q1, Q2, Q3) ) AS UnpivotTable;

这个UNPIVOT操作将 Q1, Q2, Q3 这几列转换回了 QuarterSalesAmount 两列。

结果将恢复为原始的格式:

EmployeeIDEmployeeNameQuarterSalesAmount
1JohnQ15000
1JohnQ26000
1JohnQ35500
2JaneQ14500
2JaneQ24800
2JaneQ34700

image.png

总结

PIVOT和UNPIVOT是SQL中的强大工具,它们可以帮助我们重新排列数据,以适应不同的分析和报告需求。PIVOT用于创建聚合数据的交叉表,而UNPIVOT则用于将这些交叉表转换回长格式数据。掌握这些操作可以大大提高处理和分析数据的灵活性。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!