在SQL中,PIVOT和UNPIVOT操作用于旋转表数据,将行转换为列(PIVOT)或将列转换为行(UNPIVOT)。这些操作通常用于数据分析和报告目的,可以帮助我们以更加直观的方式查看和比较数据。
PIVOT操作是将特定列的多个唯一值转换成多个列,通常用于聚合数据并将其重新排列成一个由行和列组成的矩阵。
假设我们有一个名为 EmployeeSales
的表,记录了不同员工在不同季度的销售额。
EmployeeID | EmployeeName | Quarter | SalesAmount |
---|---|---|---|
1 | John | Q1 | 5000 |
1 | John | Q2 | 6000 |
1 | John | Q3 | 5500 |
2 | Jane | Q1 | 4500 |
2 | Jane | Q2 | 4800 |
2 | Jane | Q3 | 4700 |
表结构
SQLCREATE TABLE EmployeeSales (
EmployeeID INT,
EmployeeName VARCHAR(255),
Quarter VARCHAR(2),
SalesAmount DECIMAL(10, 2),
PRIMARY KEY (EmployeeID, Quarter)
);
测试数据
SQLINSERT 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);
我们想要一个报告,显示每个员工在每个季度的销售额,但以更易于比较的格式展现。
SQLSELECT 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
进行了求和。
结果可能如下:
EmployeeID | EmployeeName | Q1 | Q2 | Q3 |
---|---|---|---|---|
1 | John | 5000 | 6000 | 5500 |
2 | Jane | 4500 | 4800 | 4700 |
通过这种方式,我们可以很容易地比较不同员工在不同季度的业绩。
UNPIVOT操作是PIVOT的逆操作,它将列转换为行。这在你需要将通过PIVOT操作生成的矩阵格式数据转换回其原始格式时非常有用。
以刚才PIVOT操作的结果为例,我们可以使用UNPIVOT将数据转换回原始格式。
将上PIVOT数据保存到表PivotTable 中
SQLselect * 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
还原数据
SQLSELECT 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
这几列转换回了 Quarter
和 SalesAmount
两列。
结果将恢复为原始的格式:
EmployeeID | EmployeeName | Quarter | SalesAmount |
---|---|---|---|
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和UNPIVOT是SQL中的强大工具,它们可以帮助我们重新排列数据,以适应不同的分析和报告需求。PIVOT用于创建聚合数据的交叉表,而UNPIVOT则用于将这些交叉表转换回长格式数据。掌握这些操作可以大大提高处理和分析数据的灵活性。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!